鸿蒙实现相机拍照及相册选择照片

前言:

1.如果你的应用不是存储类型或者相机拍照类型,你就需要用 @kit.CameraKit Api 实现相机拍照和相册选择照片功能,如果你不用这个的话,你使用 picker.PhotoViewPicker ,你就需要申请权限,那你提交应用审核的时候就会被拒,说你使用了敏感权限。

2.以下是自己封装的一个工具类,可直接导入使用

import { camera, cameraPicker } from'@kit.CameraKit';

import { photoAccessHelper } from'@kit.MediaLibraryKit';

import fs from'@ohos.file.fs';

import { BusinessError } from'@kit.BasicServicesKit';

classPhotoPicker {

privateimgSrc:string = ''

//拍照

asynctakePhoto():Promise<string> {

const pickerResult = awaitcameraPicker.pick(getContext(),

cameraPicker.PickerMediaType.PHOTO, {

cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK

});

this.saveImage(pickerResult.resultUri);

return this.imgSrc;

}

//从相册中选 photoAccessHelper版

asyncpickPhoto():Promise<string | void> {

const PhotoSelectOptions = newphotoAccessHelper.PhotoSelectOptions();

PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;

//选择图片数量

PhotoSelectOptions.maxSelectNumber = 1;

let photoPicker = newphotoAccessHelper.PhotoViewPicker();

try{

const res = awaitphotoPicker.select(PhotoSelectOptions)

if(res.photoUris.length <= 0) {

return

}

this.saveImage(res.photoUris0)

return this.imgSrc;

} catch(e) {

console.log('img----err--',JSON.stringify(e))

}

}

//存到应用缓存

privatesaveImage(src:string){

try{

const destPath = getContext(this).cacheDir

constfileType = src.split('.')1

constfileName = Date.now()

constpath = `{destPath}/{fileName}.${fileType}`

constimgFile = fs.openSync(src,fs.OpenMode.READ_ONLY)

consttempFile = fs.openSync(path,fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

// 拷贝

fs.copyFileSync(imgFile.fd,tempFile.fd)

fs.close(imgFile)

fs.close(tempFile)

// 从沙箱中获取图片路径

// this.imgSrc = fileUri.getUriFromPath(path)

this.imgSrc = path

} catch(e) {

let err: BusinessError = e asBusinessError;

console.info("img--picker Photo Save error = " + JSON.stringify(err));

}

}

}

export const photoPicker = newPhotoPicker()

相关推荐
PHOSKEY2 天前
具身机器人行星滚柱丝杠核心尺寸测量与光子精密QM系列闪测仪应用
数码相机
就是个名称2 天前
cesium 地球地固转地惯
数码相机
AttosTek3 天前
-80℃深度制冷短波红外相机选型指南
数码相机
落苜蓿蓝3 天前
多张覆盖视场的平面棋盘图片; 、对每张图片用 OpenCV 的 findChessboardCorners 检测内角点并用 corn ...
数码相机·opencv·平面
取个名字太难了~3 天前
最新手机外接相机实时传输 + 动态美颜完整项目源码
android·数码相机·智能手机·美颜·相机连接·demu
取个名字太难了~4 天前
安卓相机连接手机实时预览+美颜特效完整源码
android·数码相机·智能手机·美颜·相机连接·demu
ueotek4 天前
Ansys Speos丨面向航空航天与国防的杂散光分析——红外相机中的冷反射(Narcissus)效应
数码相机
美狐美颜SDK开放平台5 天前
直播APP开发,美颜SDK和相机SDK有什么区别?
android·深度学习·数码相机·ios·直播美颜sdk·视频美颜sdk
巧克力味的桃子5 天前
尼康Z30|P/A/S/M四大档位完整详解
数码相机
code_pgf5 天前
鱼眼相机模型
数码相机