HarmonyOS 鸿蒙Next 保存相册示例代码及图片转PixelMap对象方法

发布于 1周前 作者 vueper 来自 鸿蒙OS

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对象可以通过以下方式实现:

保存图片到相册:

  1. 使用MediaStore API来访问和操作媒体文件。
  2. 创建ContentValues对象,并设置图片的相关信息,如标题、描述、MIME类型、日期等。
  3. 使用ContentResolverinsert方法将图片数据插入到媒体存储中,这将返回图片的URI。
  4. 根据需要,可以使用该URI来访问或分享保存的图片。

图片转PixelMap对象:

  1. 使用BitmapFactory类从图片资源或文件路径中加载Bitmap对象。
  2. 调用PixelMap.create(bitmap)方法,将Bitmap转换为PixelMap对象。注意,这里的bitmap应该是通过HarmonyOS提供的API加载的,以确保兼容性。

示例代码(简化版,不包含完整错误处理和资源管理):

// 假设bitmap是通过HarmonyOS API加载的
PixelMap pixelMap = PixelMap.create(bitmap);

// 保存pixelMap为图片(这里需要先将PixelMap转换为Bitmap或其他可保存格式)
// ...(代码省略,涉及使用MediaStore和ContentResolver)
回到顶部