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

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

可参考以下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;
}
分享
微博
QQ
微信
回复
7天前
相关问题
HarmonyOS PhotoViewPicker 保存到图库
747浏览 • 1回复 待解决
把应用沙箱下的图片保存到图库
1269浏览 • 1回复 待解决
HarmonyOS 保存到相册报错13900012
150浏览 • 1回复 待解决
HarmonyOS 图片保存到相册报错
153浏览 • 1回复 待解决
HarmonyOS 保存网络图片,图库更新
414浏览 • 1回复 待解决
HarmonyOS 保存网络图片到手机图库
122浏览 • 1回复 待解决
HarmonyOS 保存网络图片至图库问题
332浏览 • 1回复 待解决
HarmonyOS Resource的文件如何保存到沙箱
120浏览 • 1回复 待解决
HarmonyOS如何将PixelMap保存到相册?
658浏览 • 1回复 待解决