HarmonyOS 鸿蒙Next如何压缩图片?
HarmonyOS 鸿蒙Next如何压缩图片?
一个排行榜列表 需要渲染出来排名 用户头像 和点赞数用for循环出来结构,有些用户头像图片很大导致列表很卡 ,有没有在循环中使用的压缩图片方法,最好是类似vue指令那种,看了文档一个imgAPI 各种问题,文档不是很清晰 。 哪位大佬可以提供一个for循环中压缩图片的demo 用户头像图片很大 导致渲染出来的列表滑动卡顿
用户上传头像的时候需要压缩图片,例如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来实现。具体步骤如下:
-
读取图片:首先,通过文件路径或URI读取目标图片,将其加载到内存中。
-
设置压缩参数:确定压缩后的图片质量(通常以百分比表示)和目标分辨率(如宽度和高度)。
-
压缩处理:使用HarmonyOS提供的图像压缩函数,将图片按照设置的参数进行压缩。该过程会调整图片的尺寸和/或质量,以减小图片的文件大小。
-
保存压缩后的图片:将压缩后的图片数据保存到指定的存储位置,可以是内部存储或外部存储。
-
释放资源:在完成图片压缩和保存后,确保释放加载到内存中的原始图片数据,以避免内存泄漏。
示例代码(伪代码):
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