既然与内存没有关系,那压缩图片有什么意义呢?对于APK而言,压缩图片是为了减小APK的体积,而对于需要网络请求的图片,压缩则是为了更快的网络响应。
所以优化之前需要清楚2个基本原则:
- 图片占用内存的大小与图片本身的大小没有直接关系;
- WebP格式的图片虽然小,但占用的内存和其他格式无差别;
图片占用内存的大小
memorySize ≈ width * height * 每个像
素需要的字节数
优化策略
既然需要的内存公式已得到,那优化就显而易见了,无非就是减小的这三个参数的值,具体的策略如下:
这里我们将图片分为2种情况来探讨:
drawable中的图片
单独探讨这种情况,是因为Android系统会对drawable中的图片进行缩放,缩放系数与设置的屏幕分辨率和drawable所表示的分辨率有关,具体的公式如下:
scale = 设备分辨率 / 资源目录分辨率 如:1080x1920的图片显示xhdpi中的图片,scale = 480 / 320 = 1.5
所以此时图片占用的内存大小为:
memorySize ≈ (width * scale) * (height * scale) * 每个像素需要的字节数
≈ width * height * scale ^ 2 *