Android 图片压缩

Charles可以模拟各种网络环境

1. 如何计算图片的大小?

总分辨率 * 像素表示的位数。

这公式是算位图的占用空间大小,而JPEG&JFIF是将位图压缩,不仅压缩图像质量还压缩图像占用空间(后面会讲到)。也就是说图像压缩不等于压缩质量和分辨率,还有压缩占用空间。

2. JPEG&JFIF压缩做了什么?这个质量到底代表了什么?

其实JPEG&JFIF做了两件事情:

去掉视觉上的冗余信息
去掉数据本身结构的冗余
第一步实现通过色彩空间转换、缩减取样、离散余弦变换、量化,第二步实现通过编码。

其实这部分可以选择跳过,只是我为了理解压缩质量是怎么体现的而去看的,后面也发现理解后很多问题都很清晰明白。

3. App怎么裁剪分辨率?

影响位图的大小有分辨率,那么减少分辨率也就能使压缩得更小了。注意这里裁剪分辨率不等于裁剪图片,不会丢失图片的某一部分。

Bitmap image = BitmapFactory.decodeStream(file);
int bitmapWidth = image.getWidth();
int bitmapHeight = image.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(scaleRatio, scaleRatio);
Bitmap scaledBitmap = Bitmap.createBitmap(image, 0, 0, bitmapWidth, bitmapHeight, matrix, false);

我们是等比例裁剪,比例和裁剪后占用空间大小并不一定成线性关系,这个裁剪具体怎么实现的和每个像素的质量有关系。

4. 用户设备主要分辨率

在友盟查看了我们的应用的相关数据:
Android,较大占比的是宽度1080像素和720像素的设备。

5. 压缩质量的大致规律

  • 会出现压缩出来反而比原图大的问题,后面会讨论
  • 在没有裁剪的情况下,压到0.6依旧不是太理想,特别是分辨率更高的照片。
  • 在excel表格中将数据组成折线图,可以看出在0.9、0.8的时候下降幅度较大,后面相对平缓一点。

6. 等比例裁剪后压缩质量的大致规律

  • 可以看到裁剪这个分辨率后压缩质量0.6的大小相对可接受,而且图片质量影响也较小。
  • 在这个分辨率下,压缩质量0.8时基本压缩到1/4至1/5。

参考

App图片压缩裁剪原理和上传方案,以及那些有趣的事儿…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值