Silicompressor源码学习(一) 基本架构和图片压缩

本文介绍了Silicompressor开源库的图片压缩原理,包括尺寸压缩和精确压缩两个步骤。首先,通过计算合适的inSampleSize进行初步尺寸压缩,然后利用矩阵缩放和ExifInterface处理旋转,确保图片质量。整个过程建议异步处理,避免阻塞UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶然看到一篇博客上说Silicompressor这个图片视频压缩开源库很强大,正好想要研究研究图片视频压缩,就读一读源码。


首先来看用法:

String filePath = SiliCompressor.with(Context).compress(imageUriString, destinationFile);

熟悉的链式语法,参数传入原图片uriString和压缩后图片存放的文件夹,返回压缩后图片绝对路径。

核心类就是SiliCompressor了。

with返回一个SiliCompressor实例,这里是一个二次判空实现的单例模式,实例化由静态内部类Builder完成(Builder模式,这里直接调用了构造器,实例化过程并不复杂,用builder有点多余),传入的context调用getApplicationContext作为依赖的context。和一些主流框架,如picasso的设计完全一样。


来看看和图片压缩有关的有哪些方法:

1.String compress(String uriString,File destFolder);

2.String compressImage(String uriString,File destFolder);

3.String compress(String uriString,File destFolder,boolean deleteSource);

4.String compress(int drawableId);

5.Bitmap getCompressImage(String imageUri);

6.Bitmap getCompressImage(String imageUri,boolean deleteSource);

compress(String uriString,File destFolder)直接调用compressImage。compress(String uriString,File destFolder,boolean deleteSource)第三个参数表示是否删除原图片,也就是在调用compressImage后判断是否删除原图片。

compress(int drawableId)新建一个File将bitmap写入file然后调用compressImage,目标文件夹固定为“/SiliCompressor/images”:

            String compressImagePath = compressImage(copyImageUri.toString(),new File(Environment.getExternalStorageDirectory(), "Silicompressor/images"));

然后是getCompressBitmap,还是调用compressImage,只不过转为bitmap返回:

    public Bitma
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值