HarmonyOS 鸿蒙Next 如何将应用沙箱内的图片生成PixelMap

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将应用沙箱内的图片生成PixelMap

需求:需要将应用沙箱的图片进行压缩到150kb以下,然后转成base64作为请求数据发送给接口。根据现在已知的情况是需要将应用沙箱内的图片转换成PixelMap,然后进行压缩,最后转成base64。请问上述步骤如何实现呢?

2 回复

生成PixelMap可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#createpixelmapsync12

可以使用packing对图片进行压缩,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#packing

图片压缩到指定大小参考:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/imagecompression#%E5%9B%BE%E7%89%87%E5%8E%8B%E7%BC%A9%E6%96%B9%E6%A1%88

packingToBase64() {

    const context: Context = getContext();

    const imagePackerApi = image.createImagePacker();

    //此处'test.jpg'仅作示例,请开发者自行替换,否则imageSource会创建失败导致后续无法正常执行。

    let filePath: string = context.cacheDir + "/test.jpg";

    const imageSourceApi: image.ImageSource = image.createImageSource(filePath);

    let packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 };

    imagePackerApi.packing(imageSourceApi, packOpts, (err: BusinessError, data: ArrayBuffer) => {

      if (err) {

        console.error(`Failed to pack the image.code ${err.code},message is ${err.message}`);

      } else {

        let buf: buffer.Buffer = buffer.from(data);

        let base64  = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length);

        console.info('base64: ' + base64);

      }

    })

  }

在HarmonyOS鸿蒙Next系统中,将应用沙箱内的图片生成PixelMap,可以通过以下步骤实现:

  1. 获取图片文件:首先,需要确定应用沙箱内图片文件的路径。通过文件IO操作,使用合适的路径和文件打开模式(如只读模式)来访问该文件。
  2. 创建ImageSource:利用image.createImageSource接口,将图片文件的文件描述符(fd)作为参数传入,创建一个ImageSource对象。
  3. 生成PixelMap:通过ImageSource对象的createPixelMapSync方法,可以同步地将图片解码为PixelMap对象。这一步是图片解码的关键,它使得图片可以在应用或系统中进行显示或处理。

整个过程中,应用沙箱机制确保了图片文件的安全性和隔离性,防止了数据泄露和恶意篡改的风险。

如果上述步骤正确无误,但问题依旧没法解决,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部