鸿蒙5.0&next开发【图片获取与保存实践】媒体开发
概述应用在业务流程中常常有获取设备图片用于编辑、分享等的需求,可能还需要读取图片信息、将图像保存到当地等。本文先容了HarmonyOS上几种常见的获取图片的方式、获取后读取图片信息、以及将图片保存在当地的操作,可供开发者学习和参考。
https://i-blog.csdnimg.cn/direct/3525a8522cd14b828454e1220ca3414b.png
获取图片
在HarmonyOS上,从智能终端获取图片的方式主要有两种:
[*]用户从系统相册中选择想要的图片
[*]通过相机拍摄获取
以下针对两种场景分别进行先容。
从相册获取图片
HarmonyOS提供了两种便捷方法来从相册中获取图片,一种是基于PhotoPickerComponent(下文统称PhotoPicker组件)来在应用中直接访问相册中的图片或视频,另一种是利用PhotoViewPicker接口拉起系统相册后选择图片或视频文件。
实现原理
PhotoPicker组件是一个ArkUI组件,应用在页面中嵌入该组件,可以直接展示系统相册中的图片或视频文件,无需额外申请权限。用户可以直接在组件中选择想要的图片或视频文件。PhotoViewPicker是图库选择器,应用利用此接口可以跳转到系统相册选择一个或多个图片/视频,然后将所选的图片/视频以uris的情势传递回应用。
因此,如果开发者担当在应用页面中直接表现系统相册,则推荐利用PhotoPicker组件;如果开发者不盼望系统相册在应用页面中占据空间,则推荐利用PhotoViewPicker跳转到系统相册应用里去选择图片或视频。
开发步调
基于PhotoPicker组件获取图片的开发步调可以参考指南[利用PhotoPicker组件访问图片/视频],利用PhotoViewPicker拉起系统相册获取图片的开发步调可以参考指南[利用Picker选择媒体库资源]。
拍照获取图片
除了从相册获取图片外,应用还可以通过拍照来获取图片。对于拍照这一行为,HarmonyOS上提供了系统相机和自界说相机两种选项。应用可以通过拉起系统相机拍照并获得一张照片,也可以自行实现自界说相机来拍照获取照片
实现原理
CameraPicker是系统提供的相机选择器,可以拉起系统相机为应用提供拍照或录像功能,效果以uri的情势返回给应用。系统还提供了一整套相机服务接口(包罗ArkTS API和C API)给开发者用于开发得当自身需求的自界说相机功能,对自界说相机开发有诉求的开发者可以参考,本文不再赘述。
开发步调
利用CameraPicker的参考代码如下:
try {
let pickerProfile: cameraPicker.PickerProfile =
{ cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK };
// 选择拉起相机动作为拍照
let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(getContext(this),
, pickerProfile);
// 将拍照uri返回给应用
this.imageUri = pickerResult.resultUri ? pickerResult.resultUri : this.imageUri;
hilog.info(0x0000, TAG, 'cameraPicker.pick succeed, uri: ' + JSON.stringify(pickerResult));
} catch (error) {
let err = error as BusinessError;
hilog.error(0x0000, TAG, `cameraPicker.pick failed, error: ${err.code}, ${err.message}`);
}
读取图片信息
实现原理
HarmonyOS提供了ImageSource图片源类用于获取图片相关信息,既可以读取图片巨细、像素格式等基本信息,也可以读取EXIF信息,如曝光时间、光圈值等。
开发步调
首先基于前文获得的图片uri,创建一个ImageSource实例,然后调用相关方法即可读取图片信息。
读取基本信息:
this.imageSource = image.createImageSource(this.path);
this.imageSource.getImageInfo((error: BusinessError, imageInfo: image.ImageInfo) => {
if (error) {
hilog.error(0x0000, TAG, `getImageInfo failed, error: ${error.code}, ${error.message}`);
} else {
hilog.info(0x0000, TAG, 'getImageInfo succeed, info: ' + JSON.stringify(imageInfo));
}
});
读取EXIF信息:
let key = ;
this.imageSource.getImageProperties(key).then((data) => {
hilog.info(0x0000, TAG, 'getImageProperties succeed, data: ' + JSON.stringify(data));
}).catch((error: BusinessError) => {
hilog.error(0x0000, TAG, 'getImageProperties failed, error: ' + JSON.stringify(error));
});
保存图片
对于已经编辑处置惩罚后的PixelMap图像,如果想要保存到当地,可以选择保存到文件目录或者是系统相册中。
保存到文件目录
实现原理
ImagePacker是HarmonyOS提供的图片打包器类,可以用于图片压缩和打包。在创建ImagePacker实例后,可以调用packToFile方法将PixelMap对象编码打包进文件,保存的路径可以指定具有写权限的文件目录。
保存到系统相册
实现原理
要将PixelMap保存到系统相册,可以通过先将pixelmap保存到文件目录的方法,获得图片uri后,利用安全控件或者弹窗授权的方式保存到系统相册。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]