为了账号安全,请及时绑定邮箱和手机立即绑定

HarmonyOS Next 将ArrayBuffer压缩到指定大小并转化为base64返回

项目中有需求要对获取的图片进行压缩,并且是要压缩到固定大小,考虑到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 ---------------

后面会继续补充不足之处。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消