HarmonyOS Next 将ArrayBuffer压缩到指定大小并转化为base64返回
【摘要】 项目中有需求要对获取的图片进行压缩,并且是要压缩到固定大小,考虑到harmonyos中对图片质量压缩方式packing,压缩后要及时检查大小,就使用while循环一步步的压缩,直至压缩到目标值let bitmap: ArrayBuffer;// 需要压缩的数据let compressSize: number;// 目标大小let considerBase64: boolean;// 是否考虑...
项目中有需求要对获取的图片进行压缩,并且是要压缩到固定大小,考虑到harmonyos中对图片质量压缩方式packing,压缩后要及时检查大小,就使用while循环一步步的压缩,直至压缩到目标值
let bitmap: ArrayBuffer;// 需要压缩的数据
let compressSize: number;// 目标大小
let considerBase64: boolean;// 是否考虑base64算法把字节数扩大4/3倍的影响
let result='';
if (bitmap){
try {
let imageSource = image.createImageSource(bitmap);
let packer = image.createImagePacker();
let packerData = await packer.packing(imageSource,{
format: 'image/jpeg'.
quality: 100
}):
if (considerBase64 && compresssize > 0){
compresssize = Math.ceil(compressSize * 3.0 / 4.0 -0.5);
}
let optionQuality = 90:
while (compresssize > 0
&& packerData.byteLength / 1024 > compresssize
&& optionQuality > 0) {
let whilePacker = image.createImagePacker();
let whileImageSource = image.createImageSource(packerData);
packerData = await whilePacker.packing(whileImageSource,{
format: 'image/jpeg',
quality: optionQuality
});
optionQuality -= 10;
}
result = buffer.from(packerData).tostrinl('base64');
} catch (error){
hilog.error(0x0000, 'error: ' + JSOM.stringify(error), '%{public}s');
}
}
----------------- end ---------------
后面会继续补充不足之处。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)