HarmonyOS 鸿蒙Next如何压缩图片?

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何压缩图片?

一个排行榜列表 需要渲染出来排名 用户头像 和点赞数用for循环出来结构,有些用户头像图片很大导致列表很卡 ,有没有在循环中使用的压缩图片方法,最好是类似vue指令那种,看了文档一个imgAPI 各种问题,文档不是很清晰 。 哪位大佬可以提供一个for循环中压缩图片的demo 用户头像图片很大 导致渲染出来的列表滑动卡顿

2 回复

用户上传头像的时候需要压缩图片,例如40003000的图片想要压缩到500500,压缩成指定快高的图片,可以先创建pixelMap,获取imageInfo,计算和目标宽高的压缩比,调用pixelMap的scale方法压缩,然后在编码压缩后的pixelmap,具体参考以下代码: // path为已获得的沙箱路径

const imageSource: image.ImageSource = image.createImageSource(path2);

let decodingOptions: image.DecodingOptions = {

  editable: true,

  desiredPixelFormat: 3,

}

this.pixelmap=await imageSource.createPixelMap(decodingOptions);

let imageInfo = await this.pixelmap.getImageInfo();

//计算压缩比

let scaleX : number = 500/imageInfo.size.width;

let scaleY : number = 500/imageInfo.size.height;

this.pixelmap.scale(scaleX,scaleY,(err : BusinessError) => {

  if (err) {

    console.error("Failed to scale pixelmap.");

    return;

  } else {

    console.info("Succeeded in scaling pixelmap.");

  }

});

const imagePackerApi = image.createImagePacker();

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

// const context: Context = getContext(this);

// const path: string = context.cacheDir + “/pixel88.jpg”;

// let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);

imagePackerApi.packing( this.pixelmap, packOpts).then((data:ArrayBuffer) => {

  console.info('Succeeded in packing the image.');

}).catch((error: BusinessError) => {

  console.error('Failed to pack the image. And the error is: '+ error);

})

更多关于HarmonyOS 鸿蒙Next如何压缩图片?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,压缩图片可以通过使用系统提供的图像处理API来实现。具体步骤如下:

  1. 读取图片:首先,通过文件路径或URI读取目标图片,将其加载到内存中。

  2. 设置压缩参数:确定压缩后的图片质量(通常以百分比表示)和目标分辨率(如宽度和高度)。

  3. 压缩处理:使用HarmonyOS提供的图像压缩函数,将图片按照设置的参数进行压缩。该过程会调整图片的尺寸和/或质量,以减小图片的文件大小。

  4. 保存压缩后的图片:将压缩后的图片数据保存到指定的存储位置,可以是内部存储或外部存储。

  5. 释放资源:在完成图片压缩和保存后,确保释放加载到内存中的原始图片数据,以避免内存泄漏。

示例代码(伪代码):

Image image = LoadImage("path/to/image");
SetCompressionParams(image, quality, width, height);
CompressedImage compressedImage = CompressImage(image);
SaveImage(compressedImage, "path/to/save");
ReleaseImage(image);

请注意,上述代码为示意性伪代码,实际开发中需使用HarmonyOS提供的API进行实现。

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

回到顶部