HarmonyOS 鸿蒙Next将image.PixelMap保存到相册中
HarmonyOS 鸿蒙Next将image.PixelMap保存到相册中 image.PixelMap保存到相册中,之前ir是让我使用下面的方法,但是必须要申请权限,我申请后,失败了,需要换一种不用权限的实现,请问如何实现呢
// 打包 PixelMap 为 jpg 格式
async function packingPixelMap2Jpg(pixelMap: PixelMap): Promise<ArrayBuffer> {
// 创建ImagePacker实例
const imagePackerApi = image.createImagePacker();
// 设置打包参数
// format:图片打包格式,只支持 jpg 和 webp
// quality:JPEG 编码输出图片质量
// bufferSize:图片大小,默认 10M
const packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 };
let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
try {
// 图片压缩或重新打包
imageBuffer = await imagePackerApi.packing(pixelMap, packOpts);
} catch (err) {
console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`);
}
return imageBuffer;
}
async function WritePhoto() {
console.info('createAssetDemo');
let context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE;
let extension: string = 'png';
let options: photoAccessHelper.CreateOptions = {
title: 'testPhoto'
}
let uri = await phAccessHelper.createAsset(photoType, extension, options);
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
try {
const imageBuffer = await this.packingPixelMap2Jpg(this.pixelMap as image.PixelMap)
// 写到媒体库文件中
await fs.write(file.fd, imageBuffer);
await fs.close(file.fd);
AlertDialog.show({ message: '已保存至相册!' });
} catch (err) {
console.error("error is " + JSON.stringify(err))
}
}
更多关于HarmonyOS 鸿蒙Next将image.PixelMap保存到相册中的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以再结合一下saveButton
来保存,安全控件的保存控件,用户通过点击该保存按钮,可以临时获取存储权限,而不需要权限弹框授权确认。文档如下
更多关于HarmonyOS 鸿蒙Next将image.PixelMap保存到相册中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
saveButton
在HarmonyOS(鸿蒙)系统中,将image.PixelMap
保存到相册中,可以通过以下步骤实现,这里不涉及Java或C语言的具体代码,而是提供一个大致的流程:
-
获取PixelMap对象:首先确保你已经有一个
PixelMap
对象,这个对象通常是通过图像加载或处理得到的。 -
转换为Bitmap:虽然直接操作
PixelMap
是鸿蒙特有的,但为了兼容相册保存,可能需要将其转换为鸿蒙系统识别的Bitmap格式(如果PixelMap
不是直接兼容的话,具体需参考鸿蒙API文档确认)。 -
使用MediaStore API:鸿蒙系统提供了类似Android的
MediaStore
API来管理媒体文件。你可以使用这个API将Bitmap保存到相册中。这通常涉及到创建一个ContentValues
对象来存储图像信息(如标题、描述、MIME类型等),然后使用ContentResolver
的insert
方法将其插入到媒体数据库中。 -
处理权限:确保你的应用已经获得了写入外部存储的权限,因为保存图片到相册通常涉及到外部存储的访问。
-
保存并通知相册:一旦Bitmap被成功插入到媒体数据库中,系统通常会自动更新相册,显示新保存的图片。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html