《鸿蒙开发-答案之书》base64转为图片文件

99 阅读1分钟
《鸿蒙开发-答案之书》base64转为图片文件

首先这不是保存到相册,因为相册需要特殊权限,保存到自己目录下的。

直接上代码:

export async function saveBase64Image(base64Result: string, fileName: string,
  showToastMsg: ResourceStr = $r('app.string.save_success_image')): Promise<Boolean> {
  try {
    // 下面文档上有刷新到相册的做法,但是我不想问READ_IMAGEVIDEO权限,先不做刷新
    // https://developer.huawei.com/consumer/cn/forum/topic/0202153565209145468
    // let helper = photoAccessHelper.getPhotoAccessHelper(getContext());
    // let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg')

    let uri = '';
    try {
      let PhotoSaveOptions = new picker.PhotoSaveOptions();
      //保存图片默认名称
      PhotoSaveOptions.newFileNames = [fileName];
      let photoPicker = new picker.PhotoViewPicker();
      //调起系统的图片保存功能
      photoPicker.save(PhotoSaveOptions).then((PhotoSaveResult) => {
        uri = PhotoSaveResult[0];
        //获取图片的base64字符串
        //let imageStr = base64Result.split(',')[1];
        //打开文件
        let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
        //base64字符串转成buffer
        const decodeBuffer = buffer.from(base64Result, 'base64').buffer;
        //写入文件
        fs.writeSync(file.fd, decodeBuffer);
        //关闭文件
        fs.closeSync(file);
        showToast(showToastMsg)
      }).catch((err: Error) => {
        console.error(err + '');
      })
    } catch (e) {
      console.error(e);
    }
    //showToast(showToastMsg)
    return Promise.resolve(true)
  } catch (e) {
    throw new Error(e)
  }
}