同一张 4000×3000 原图 3.2MB,quality=95 压出来 2.8MB,quality=82 只有 620KB。放在 24 寸屏上并排看,肉眼分不出差别,列表页加载时间却差了 4 倍。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,JPEG 的量化表在 quality 90 以上变化很陡,多出来的比特大多花在人眼不敏感的高频细节上。quality 每加 5 点,体积涨三成,SSIM 只涨零点几。默认照搬 95 等于把存储和带宽白送出去。
「JPEG 量化参数」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
from PIL import Image
im = Image.open(src).convert("RGB")
im.save(dst, "JPEG", quality=84, optimize=True, progressive=True)
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,先用 82 到 86 做基准 大多数商品图够用;人像和渐变多的图单独抽一批 对比 80 和 88 的块效应;定下参数后写进上传管线 不要各业务各传一个值;上线后看 CDN 出流量和 LCP 两个数。
最后用这个标准收尾,图片平均体积从 2.8MB 降到 650KB,列表页 LCP 快了 1.2 秒,抽检 20 张没有可见块状伪影。
