纯血鸿蒙APP实战开发——图片压缩方案

介绍

图片压缩在应用开发中是一个非常常见的需求,特别是在处理用户上传图片时,需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内。

效果图预览

使用说明

  1. 进入页面,输入图片压缩目标大小,点击“图片压缩”按钮查看压缩后的图片。效果图中输入图片压缩目标大小为5kb,实际压缩大小小于等于5kb,不一定准确为5kb。

实现思路

  1. 获取图片。从资源管理器获取要压缩的图片,创建ImageSource实例,设置解码参数DecodingOptions,使用createPixelMap获取PixelMap图片对象。
   // 获取resourceManager资源管理器
   const resourceMgr: resourceManager.ResourceManager = this.context.resourceManager;
   // 获取资源管理器后,再调用resourceMgr.getRawFileContent()获取资源文件的ArrayBuffer。
   resourceMgr.getRawFileContent('image_compression_before.jpeg').then((fileData: Uint8Array) => {
   
     // 获取图片的ArrayBuffer
     const buffer = fileData.buffer.slice(0);
     // 创建ImageSource实例
     const imageSource: image.ImageSource = image.createImageSource(buffer);
     // 设置解码参数DecodingOptions,解码获取PixelMap图片对象。
     let decodingOptions: image.DecodingOptions = {
   
       editable: true, // 是否可编辑。当取值为false时,图片不可二次编辑,如crop等操作将失败。
       desiredPixelFormat: 3, // 解码的像素格式。3表示RGBA_8888。
     }
     // 创建pixelMap
     imageSource.createPixelMap(decodingOptions).then((originalPixelMap: image.PixelMap) => {
   
       // 压缩图片
       compressedImage(originalPixelMap, this.maxCompressedImageSize).then((showImage: CompressedImageInfo) => {
   
         // 获取压缩后的图片信息
         this.compressedImageSrc = fileUri.getUriFromPath(showImage.imageUri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值