HarmonyOS鸿蒙Next中Api 12上如何将PixMap保存到图库

HarmonyOS鸿蒙Next中Api 12上如何将PixMap保存到图库 Api 12上如何将PixMap保存到图库

4 回复

可以尝试使用SaveButton组件

参考:https://developer.huawei.com/consumer/cn/blog/topic/03157306639465048

let pixelMap = await image.createImageSource(res.result as ArrayBuffer).createPixelMap()

// onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let packOpts: image.PackingOption = { format: 'image/png', quality: 100 }
const imagePacker: image.ImagePacker = image.createImagePacker();
return imagePacker.packToFile(pixelMap, file.fd, packOpts).finally(() => {
  imagePacker.release(); //释放
  fs.close(file.fd);
  promptAction.showToast({
    message: '图片已保存至相册',
    duration: 2000
  });
});

更多关于HarmonyOS鸿蒙Next中Api 12上如何将PixMap保存到图库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


补充下,SaveButton目前存在很多限制可能会导致授权失败,安全控件因其自动授权的特性,为了保障用户的隐私不被恶意应用获取,针对安全控件作了很多的限制。应用开发者需保证安全控件在应用界面上清晰可见、用户能明确识别,防止因覆盖、混淆等因素导致授权失败。

当因控件样式不合法导致授权失败的情况发生时,请开发者检查设备错误日志,过滤关键字"SecurityComponentCheckFail"可以获取具体原因。

相关的约束与限制请参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/security-component-overview-V5

约束与限制 :

  • 字体、图标尺寸过小。
  • 安全控件整体尺寸过大。
  • 字体、图标、背景按钮的颜色透明度过高。
  • 字体或图标与背景按钮颜色过于相似。
  • 安全控件超出屏幕、超出窗口等,导致显示不全。
  • 安全控件被其他组件或窗口遮挡。
  • 安全控件的父组件有类似变形模糊等可能导致安全控件显示不完整的属性。

在HarmonyOS鸿蒙Next中,使用API 12将PixMap保存到图库可以通过以下步骤实现:

  1. 创建PixMap对象:首先,确保你已经有一个PixMap对象,该对象包含了要保存的图像数据。

  2. 获取ImageSaver实例:使用ImageSaver类来保存图像。通过ImageSaver.getInstance(context)获取ImageSaver的实例。

  3. 配置保存选项:创建一个ImageSaver.Options对象,并设置必要的参数,如图像的质量、格式等。

  4. 保存PixMap到图库:调用ImageSaver.savePixMap方法,传入PixMap对象和配置好的Options对象,将图像保存到图库。

  5. 处理保存结果:ImageSaver.savePixMap方法会返回一个布尔值,表示保存是否成功。你可以根据返回值进行相应的处理。

示例代码如下:

import { ImageSaver, PixMap } from '@ohos.multimedia.image';

// 假设你已经有一个PixMap对象
const pixMap: PixMap = ...;

// 获取ImageSaver实例
const imageSaver: ImageSaver = ImageSaver.getInstance(context);

// 配置保存选项
const options: ImageSaver.Options = {
  format: 'JPEG',
  quality: 90,
};

// 保存PixMap到图库
const isSaved: boolean = imageSaver.savePixMap(pixMap, options);

// 处理保存结果
if (isSaved) {
  console.log('PixMap保存成功');
} else {
  console.log('PixMap保存失败');
}

在HarmonyOS鸿蒙Next中,使用Api 12将PixMap保存到图库,可以通过以下步骤实现:首先,使用ImagePacker将PixMap编码为图像数据;然后,使用MediaLibrary API将图像数据保存到图库。具体代码示例如下:

// 假设pixMap是你的PixMap对象
ImagePacker imagePacker = ImagePacker.create();
imagePacker.setFormat("image/jpeg"); // 设置图像格式
PixelMap pixelMap = pixMap.getPixelMap(); // 获取PixelMap
ImageSource imageSource = ImageSource.create(pixelMap, null);
imagePacker.addImage(imageSource);

// 将图像数据保存到图库
MediaLibrary mediaLibrary = MediaLibrary.getInstance();
String displayName = "my_image.jpg";
String relativePath = "Pictures/";
mediaLibrary.saveImage(imagePacker.getPackedData(), displayName, relativePath);

确保在config.json中声明ohos.permission.WRITE_MEDIA权限。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!