《鸿蒙/Harmony | 开发日志》图片压缩

一般在做APP 头像、背景等功能的时候,调用系统选择图片功能,上传给服务端,图片都非常的大,相机像素越高图片就越大。一般都有几 M,甚至 10M以上的,这个时候一般需要压缩图片,变成非常小的图片,如果不压缩图片,将几 M 的图片作为头像,用户访问个头像发现下载要个 1-2 秒,就体验非常差。

压缩图片可以服务端压缩,同时也可以客户端直接压缩好再上传。

鸿蒙自带提供了官方 API 压缩图片。

压缩图片

官方提供了 2 类接口,一类是读取源文件叫做解码,一类是将解码源文件处理成别的格式或其他叫做编码。压缩图片就利用上面两个接口即可完成。

下面是封装好的方法:

/**
 * 压缩图片
 * @param buffer 二进制
 * @param contentType image/jpeg 保存后的文件格式
 * @param compressionRatio 1 就是 100%, 0.5 就是50%
 * @returns
 */
export async function compression(buffer: ArrayBuffer, contentType: string, compressionRatio: number = 1) {
	  // 这里判断 1,是因为压缩的时候传了 100%,也会丢失一点精度,所以直接返回了。
    if (compressionRatio == 1) {
        return buffer
    }
    const imageSource: image.ImageSource = image.createImageSource(buffer);

    const imagePackerApi = image.createImagePacker();
    const bf = await imagePackerApi.packing(imageSource, { format: contentType, quality: compressionRatio * 100 })

    return bf
}

至于如何读取源文件变成buffer,可以参考之前的文章《鸿蒙/Harmony | 开发日志》选择文件或拍照功能

参考

  1. 【鸿蒙官方文档】图片解码
  2. 【鸿蒙官方文档】图片编码
  3. 鸿蒙/Harmony | 开发日志》选择文件或拍照功能
posted @ 2024-09-18 16:47  xakoy  阅读(89)  评论(0编辑  收藏  举报