前言

将应用中的图片保存到本地相册是常见的用户需求,如保存截图、下载图片等。@pura/harmony-utilsImageUtil 封装了图片保存方法,支持保存PixelMap到系统相册。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

在这里插入图片描述

一、ImageUtil保存核心API

ImageUtil 提供了以下图片保存方法:

方法 说明 返回类型 使用场景
savePixelMap(pixelMap) 保存PixelMap到相册 string 截图保存
saveImageToArrayBuffer(path) 图片转ArrayBuffer ArrayBuffer 图片处理

1.1 核心特性

  • 简洁易用:封装复杂API为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 相册集成:保存后可在系统相册中查看

1.2 保存方式对照

方式 方法 保存位置 可见性
相册保存 savePixelMap 系统相册 所有应用可见
文件保存 writeArrayBufferSync 应用目录 仅本应用可见

二、完整使用步骤

2.1 安装依赖

ohpm install @pura/harmony-utils

2.2 保存图片到相册

import { ImageUtil } from '@pura/harmony-utils';

Button('保存图片到相册')
  .width('100%')
  .onClick(async () => {
    try {
      let uri = await ImageUtil.savePixelMap(this.pixelMap);
      this.result = `保存成功 ✅\nURI: ${uri}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 保存前确认

async saveWithConfirm() {
  let confirm = await DialogUtil.confirm('是否保存图片到相册?');
  if (confirm) {
    let uri = await ImageUtil.savePixelMap(this.pixelMap);
    ToastUtil.show('保存成功');
  }
}

在这里插入图片描述

三、完整页面示例

import { ImageUtil, ToastUtil } from '@pura/harmony-utils';

@Entry
@Component
struct ImageSaveDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('保存图片').width('100%').onClick(async () => {
        try {
          this.result = '图片保存功能\n需先创建PixelMap对象';
        } catch (e) { this.result = '异常: ' + e; }
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 截图保存

import { ImageUtil, SnapshotUtil, ToastUtil } from '@pura/harmony-utils';

async function saveScreenshot(component: Component): Promise<void> {
  let pixelMap = await SnapshotUtil.snapshot(component);
  let uri = await ImageUtil.savePixelMap(pixelMap);
  ToastUtil.showToast('截图已保存到相册');
}

4.2 批量保存

async function saveMultipleImages(pixelMaps: PixelMap[]): Promise<string[]> {
  let uris: string[] = [];
  for (let pixelMap of pixelMaps) {
    let uri = await ImageUtil.savePixelMap(pixelMap);
    uris.push(uri);
  }
  return uris;
}

五、注意事项

  1. 权限要求:保存到相册需要相册写入权限
  2. 主线程:保存操作需在主线程执行
  3. 文件格式:默认保存为PNG格式
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 存储空间:保存前检查存储空间是否充足

六、常见问题

Q1: 保存图片时提示权限不足?

需要在module.json5中配置 ohos.permission.WRITE_IMAGEVIDEO 权限,并动态申请。

Q2: 保存后相册中看不到?

部分设备需要刷新相册索引,可以通知媒体库更新。

Q3: 如何指定保存格式?

当前版本默认PNG格式,如需其他格式需先转换再保存。

Q4: 保存大图片会OOM吗?

大图片保存可能消耗较多内存,建议先压缩再保存。

在这里插入图片描述
在这里插入图片描述

总结

ImageUtil 的图片保存方法为应用图片导出提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法实现截图保存、图片下载等功能。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐