HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri

HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri

将稿件生成为指定样式的海报图片,并社会化分享到第三方APP

1. 用组件绘制出海报的样式。
   2. 使用componentSnapshot组件截图,生成pixelMap格式图片。
3. 使用SaveButton组件将pixeMap存入到相册。
4. 再使用systemShare将图片分享出去
存在问题:
   在步骤3时,用fs.write方法,可将图片存入相册。但是步骤4 systemShare分享该图片,需要获取到该图片
的uri,目前无法获取到刚才存入的图片的uri。

问题就是:如何获取到fs.write写入的图片的uri地址。(不需要用户点击打开相册选择刚存入的图片)

2 回复

用savebutton保存图片的时候,就可以拿到url。 参考如下方法: //图片转换成字节数组

export async function packingPixelMap2Jpg(pixelMap: PixelMap): Promise<ArrayBuffer> {
  // 创建ImagePacker实例
  const imagePackerApi = image.createImagePacker();
  // 设置打包参数
  // format:图片打包格式,只支持 jpg 和 webp
  // quality:JPEG 编码输出图片质量
  // bufferSize:图片大小,默认 10M
  const packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 };
  let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
  try {
    // 图片压缩或重新打包
    imageBuffer = await imagePackerApi.packing(pixelMap, packOpts);
  } catch (err) {
    console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`);
  }
  return imageBuffer;
}
//通过uri写入数据保存图片,uri就是您需要的
SaveButton().width('40%').backgroundColor("#1A1D25").onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {

          if (result == SaveButtonOnClickResult.SUCCESS) {
            try {
              const context = getContext(this);
              let helper = photoAccessHelper.getPhotoAccessHelper(context);
              // onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
              let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
             // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
              let file = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
              const imageBuffer = await packingPixelMap2Jpg(pixelMap as image.PixelMap)
             // 写到媒体库文件中
             fs.writeSync(file.fd, imageBuffer);
              // 关闭文件
              fs.closeSync(file.fd);
              
              promptAction.showToast({
                message: '已保存至相册',
                duration: 2500
              });
            } catch (error) {
              console.error("error is "+ JSON.stringify(error));
            }
          }
          else {
            console.error("result error is "+ JSON.stringify(result));
          }
        })
		

更多关于HarmonyOS 鸿蒙Next如何获取存入到本地的pixelMap图片的uri的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,获取存入到本地的pixelMap图片的URI,通常涉及以下几个步骤:

  1. 保存PixelMap到文件:首先,将PixelMap对象保存为本地文件,可以选择常见的图片格式如PNG或JPEG。使用FileSaver类来实现保存操作,指定保存路径和文件名。

  2. 获取文件URI:保存成功后,通过文件路径构造URI。HarmonyOS提供了Uri类,可以通过Uri.parse("file:///" + 文件绝对路径)的方式来获取文件的URI。注意,路径需要使用绝对路径,并且根据系统要求,可能需要对路径进行编码处理。

  3. 访问权限:确保应用有权限访问存储位置。在config.json中声明存储权限,并在运行时请求用户授权。

  4. URI使用:获取到的URI可以用于图片显示、分享或其他需要URI的场景。

示例代码(简化版,未包含错误处理):

FileSaver fileSaver = new FileSaver();
fileSaver.save(pixelMap, filePath, FileSaver.SaveCallback{
    @Override
    public void onSuccess(String fileUri) {
        Uri uri = Uri.parse("file:///" + filePath);
        // 使用uri
    }
    @Override
    public void onFail(int errorCode, String errorMessage) {
        // 处理失败
    }
});

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

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