HarmonyOS 鸿蒙Next 上传身份证照片并压缩存储demo 实现拍照和选择相册两种方式上传身份证照片,将图片压缩至500KB以下并存储在沙箱中。请提供完整的demo,以实现这两种上传方式。
HarmonyOS 鸿蒙Next 上传身份证照片并压缩存储demo
实现拍照和选择相册两种方式上传身份证照片,将图片压缩至500KB以下并存储在沙箱中。请提供完整的demo,以实现这两种上传方式。
上传身份证照片,分为拍照和选择相册两种方式,现在需要将上传的图片压缩至500KB以下,并存储在沙箱中,麻烦给个完整的demo,实现这两种方式的上传,谢谢。
关于图片压缩可以参考:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/imagecompression
选择相册图片并将其保存至应用沙箱目录可以参考:
import picker from '@ohos.multimedia.cameraPicker'
import camera from '@ohos.multimedia.camera';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
import fileuri from '@ohos.file.fileuri';
import fs from '@ohos.file.fs';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
let context = getContext(this) as common.Context;
class CameraPosition {
cameraPosition: camera.CameraPosition
saveUri: string
constructor(cameraPosition: camera.CameraPosition, saveUri: string) {
this.cameraPosition = cameraPosition
this.saveUri = saveUri
}
}
let pathDir = getContext().filesDir;
console.log('保存路径为' + pathDir)
let filePath = pathDir + '/picture.jpg'
fs.createRandomAccessFileSync(filePath, fs.OpenMode.CREATE);
let uri = fileuri.getUriFromPath(filePath);
async function photo() {
try {
let pickerProfile = new CameraPosition(camera.CameraPosition.CAMERA_POSITION_BACK, uri)
let pickerResult: picker.PickerResult = await picker.pick(context,
[picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO], pickerProfile);
console.log("the pick pickerResult is:" + JSON.stringify(pickerResult));
} catch (error) {
let err = error as BusinessError;
console.error(`the pick call failed. error code: ${err.code}`);
}
}
async function picture() {
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
let photoPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {
let photouri: Array<string> = PhotoSelectResult.photoUris
let file = fs.openSync(photouri[0], fs.OpenMode.READ_ONLY)
let file2 = fs.openSync(pathDir+'/picture2.jpg', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
fs.copyFileSync(file.fd, file2.fd)
fs.closeSync(file);
fs.closeSync(file2);
})
}
@Entry
@Component
export struct Index {
build() {
Column() {
Button('选择并保存').onClick(() => {
picture()
})
Button('拍照并保存').onClick(() => {
photo()
})
}
}
}
更多关于HarmonyOS 鸿蒙Next 上传身份证照片并压缩存储demo 实现拍照和选择相册两种方式上传身份证照片,将图片压缩至500KB以下并存储在沙箱中。请提供完整的demo,以实现这两种上传方式。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
以下是一个HarmonyOS鸿蒙Next系统下实现拍照和选择相册两种方式上传身份证照片,并将图片压缩至500KB以下存储在沙箱中的简化demo代码:
MainAbility.java(或相应的Kotlin文件)
// 引入必要的包
public class MainAbility extends Ability {
private ImagePicker imagePicker;
private CameraKit cameraKit;
private Bitmap bitmap;
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_ability_main);
// 初始化图片选择器
imagePicker = findComponentById(ResourceTable.Id_image_picker);
imagePicker.setPickerListener(new ImagePicker.PickerListener() {
@Override
public void onPicked(List<String> imagePaths, boolean isOriginal) {
compressAndSaveImage(imagePaths.get(0));
}
});
// 初始化相机
cameraKit = findComponentById(ResourceTable.Id_camera_kit);
cameraKit.setCaptureListener(new CameraKit.CaptureListener() {
@Override
public void onCapture(CaptureResult result, Bundle extras) {
compressAndSaveImage(result.getOriginalImageUri().getPath());
}
});
}
private void compressAndSaveImage(String imagePath) {
// 实现图片压缩逻辑,将图片压缩至500KB以下
// 使用BitmapFactory加载图片,然后压缩并存储到沙箱中
// 注意:压缩逻辑需要具体实现,此处省略
}
}
XML布局文件(ability_main.xml)
<DirectionalLayout>
<ImagePicker id="image_picker" />
<CameraKit id="camera_kit" />
</DirectionalLayout>
请注意,compressAndSaveImage
方法中的图片压缩逻辑需要具体实现,可以使用HarmonyOS提供的图像处理API来完成。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html