HarmonyOS 鸿蒙Next 保存相册示例代码及图片转PixelMap对象方法
HarmonyOS 鸿蒙Next 保存相册示例代码及图片转PixelMap对象方法 麻烦大佬帮忙提供保存到相册示例代码,另外如何将图片转成PixelMap对象?
2 回复
1、保存到相册参考以下Demo:
//保存至相册
async WritePhoto() {
let context = this.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.selectedImgPixelMap as image.PixelMap)
// 写到媒体库文件中
await fs.write(file.fd, imageBuffer);
await fs.close(file.fd);
promptAction.showToast({
message: '保存至相册成功',
duration: 2500
});
}
catch (err) {
console.error("error is "+ JSON.stringify(err))
}
}
// 打包 PixelMap 为 jpg 格式
async 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: 100 };
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;
}
2、图片转成PixelMap对象:
this.uri = 'file://media/Photo/xxx/IMG_26.jpg';
let file = fs.openSync(this.uri, fs.OpenMode.READ_ONLY);
console.info('file fd:' + file.fd);
const imageSource: image.ImageSource = image.createImageSource(file.fd);
let decodingOptions: image.DecodingOptions = {
editable: true,
desiredPixelFormat: 3,
}
this.selectedImgPixelMap = await imageSource.createPixelMap(decodingOptions);
更多关于HarmonyOS 鸿蒙Next 保存相册示例代码及图片转PixelMap对象方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS中,保存图片到相册以及将图片转换为PixelMap对象可以通过以下方式实现:
保存图片到相册:
- 使用
MediaStore
API来访问和操作媒体文件。 - 创建
ContentValues
对象,并设置图片的相关信息,如标题、描述、MIME类型、日期等。 - 使用
ContentResolver
的insert
方法将图片数据插入到媒体存储中,这将返回图片的URI。 - 根据需要,可以使用该URI来访问或分享保存的图片。
图片转PixelMap对象:
- 使用
BitmapFactory
类从图片资源或文件路径中加载Bitmap对象。 - 调用
PixelMap.create(bitmap)
方法,将Bitmap转换为PixelMap对象。注意,这里的bitmap应该是通过HarmonyOS提供的API加载的,以确保兼容性。
示例代码(简化版,不包含完整错误处理和资源管理):
// 假设bitmap是通过HarmonyOS API加载的
PixelMap pixelMap = PixelMap.create(bitmap);
// 保存pixelMap为图片(这里需要先将PixelMap转换为Bitmap或其他可保存格式)
// ...(代码省略,涉及使用MediaStore和ContentResolver)