Android 图片压缩

    xiaoxiao2025-03-26  21

    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图片压缩裁剪原理和上传方案,以及那些有趣的事儿…

    转载请注明原文地址: https://ju.6miu.com/read-1297398.html
    最新回复(0)