HarmonyOS 保存到图库时,报错Internal error?

如题:HarmonyOS 保存到图库时,报错Internal error?

阅读 480
1 个回答

可参考以下demo:

//保存至相册
async WritePhoto() {
  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.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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进