《鸿蒙开发-答案之书》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)
}
}