鸿蒙Next中如何将base64图片保存到相册

在鸿蒙Next开发中,如何将Base64格式的图片数据解码并保存到设备相册?需要具体的代码示例或API调用方法,以及相关权限配置说明。

2 回复

鸿蒙Next中,用@ohos.file.fs@ohos.multimedia.mediaLibrary就能搞定!先解码base64,再用mediaLibrary写入相册。代码简洁如:media.getMediaLibrary().createAsset(...)。记得申请存储权限哦,不然相册会傲娇拒绝~ 😄

更多关于鸿蒙Next中如何将base64图片保存到相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,将Base64图片保存到相册可以通过以下步骤实现:

步骤说明

  1. 将Base64字符串转换为PixelMap:使用ImageSource解码Base64数据。
  2. 将PixelMap保存为图片文件:使用ImagePacker将PixelMap编码为图片文件(如JPEG/PNG)。
  3. 将文件添加到系统相册:通过PhotoAccessHelper将文件插入媒体库。

示例代码

import image from '@ohos.multimedia.image';
import fs from '@ohos.file.fs';
import photoAccessHelper from '@ohos.file.photoAccessHelper';

async function saveBase64ToGallery(base64Data: string): Promise<void> {
  try {
    // 1. 解码Base64字符串为PixelMap
    const imageSource = image.createImageSource(base64Data);
    const decodingOptions = {
      desiredSize: { width: 0, height: 0 }, // 0表示使用原始尺寸
      desiredRegion: { size: { width: 0, height: 0 }, x: 0, y: 0 },
      desiredPixelFormat: 3 // RGB_888
    };
    const pixelMap = await imageSource.createPixelMap(decodingOptions);

    // 2. 将PixelMap保存为临时文件
    const packer = image.createImagePacker();
    const tempDir = globalThis.context.cacheDir; // 使用缓存目录
    const filePath = tempDir + '/temp_image.jpg';
    const file = await fs.open(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    const packOptions = { format: "image/jpeg", quality: 100 }; // 设置格式和质量
    await packer.packing(pixelMap, packOptions, file.fd);
    await fs.close(file);

    // 3. 将文件添加到相册
    const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(globalThis.context);
    await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'temp_image.jpg', filePath);
    
    console.log('图片已保存到相册');
  } catch (error) {
    console.error('保存失败:', error);
  }
}

// 调用示例
const base64String = 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'; // 替换为实际Base64数据
saveBase64ToGallery(base64String);

注意事项

  • 权限申请:在module.json5中添加相册访问权限:
    "requestPermissions": [
      {
        "name": "ohos.permission.READ_IMAGEVIDEO",
        "reason": "需要访问相册"
      },
      {
        "name": "ohos.permission.WRITE_IMAGEVIDEO",
        "reason": "需要保存图片到相册"
      }
    ]
    
  • Base64格式:确保字符串包含正确的前缀(如data:image/jpeg;base64,)。
  • 错误处理:实际使用时需根据业务补充异常处理逻辑。

通过以上代码,Base64图片可成功保存至系统相册。

回到顶部