先把结论放在前面:压缩有两个正交维度——尺寸压缩(改宽高,线性省内存)与质量压缩(改编码质量,只省文件与流量)。两者解决的痛点不同:尺寸压缩解决内存与渲染开销,质量压缩解决存储与网络。 面试与实践中最容易犯的错,是用质量压缩去解决内存问题——把 JPEG 质量从 100 降到 50,内存占用几乎没变,因为它在解码后仍是同样的像素。
面试里这题属于"细节区分型"。答得浅的是"compress时传一个 quality 参数";答得深的是能讲清compress返回的是布尔值而非字节数、编码格式与质量的取舍表、inSampleSize与inScaled的区别,以及现代格式(WebP、AVIF)在有损/无损/带 alpha 三种场景下的选择逻辑。
两个维度必须分清
| 维度 | 手段 | 省的是 | 不省的是 |
|---|---|---|---|
| 尺寸压缩 | inSampleSize、createScaledBitmap、inScaled | 内存、渲染开销、GPU 纹理 | 文件大小与流量 |
| 质量压缩 | compress(form |