Charles可以模拟各种网络环境
总分辨率 * 像素表示的位数。
这公式是算位图的占用空间大小,而JPEG&JFIF是将位图压缩,不仅压缩图像质量还压缩图像占用空间(后面会讲到)。也就是说图像压缩不等于压缩质量和分辨率,还有压缩占用空间。
其实JPEG&JFIF做了两件事情:
去掉视觉上的冗余信息 去掉数据本身结构的冗余 第一步实现通过色彩空间转换、缩减取样、离散余弦变换、量化,第二步实现通过编码。
其实这部分可以选择跳过,只是我为了理解压缩质量是怎么体现的而去看的,后面也发现理解后很多问题都很清晰明白。
影响位图的大小有分辨率,那么减少分辨率也就能使压缩得更小了。注意这里裁剪分辨率不等于裁剪图片,不会丢失图片的某一部分。
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);我们是等比例裁剪,比例和裁剪后占用空间大小并不一定成线性关系,这个裁剪具体怎么实现的和每个像素的质量有关系。
在友盟查看了我们的应用的相关数据: Android,较大占比的是宽度1080像素和720像素的设备。
App图片压缩裁剪原理和上传方案,以及那些有趣的事儿…