为网页压缩和调整图片
图片通常是页面上最重的东西,而这份重量大多是可以避免的。手机里刚拍出的照片可能宽达四千像素、体积好几兆,却被显示在六百像素宽的位置上。解决办法很少是某个神奇的设置,而是一小串决策——而大多数人最先去调的那一项,恰恰是影响最小的。
先调尺寸,再压缩
最大的收益几乎总是来自尺寸而非质量。文件大小与像素数量成正比,所以把宽和高各减半,在施加任何压缩之前就已经去掉了大约四分之三的数据。一张显示宽度从不超过 800 像素的图片却按 4000 像素保存,等于为没人看得见的像素多付了四到五倍。
顺序很重要。先压缩一张巨大的图片再让浏览器缩小,等于把你想省下的带宽原样浪费掉;而在重度压缩之后再缩小,往往让瑕疵更明显而不是更少。先确定图片实际显示的最大尺寸,缩到那个尺寸,然后才考虑质量。
选择格式
JPEG 适合照片。它丢弃的是人眼不敏感的细节,因此在渐变和肤色上表现极好,在锐利边缘上则较差。PNG 是无损的,精确保留每一个像素,适合截图、标志、线稿以及需要透明度的场合,却不适合照片——那会产生比实际需要大出数倍的文件。
WebP 兼顾两种情况,在观感相近的前提下通常比同等 JPEG 小 25%~35%,并像 PNG 一样支持透明。浏览器支持已经普及多年,所以对多数网站而言诚实的答案是:用 WebP,只有在必须兼容非常老旧的环境时才保留原格式作为回退。
质量滑块究竟在做什么
质量值并不是任何有意义事物的百分比——它是一个控制丢弃细节激进程度的旋钮,而且刻度不是线性的。真正有意义的区间很窄:大约在 75 到 85 之间,多数照片在正常显示尺寸下与原图难以分辨,而文件只有质量 100 的一小部分。超过 90,你买到的多半是字节数而非看得见的质量。
正确的选法是去看,而不是去猜。用几组设置各导出一次,在图片**实际显示的尺寸**下比较,而不是放大之后。放大到 400% 时明显的瑕疵,在实际位置上常常根本看不出来;用错误的缩放比例做判断,是人们发布出比所需大两三倍图片的最常见原因。
重复压缩不是免费的
有损格式每重新编码一次就劣化一次。打开一张 JPEG、做点小修改再保存,细节就被第二次丢弃,损失会累积——那种反复往返后特有的块状、糊成一片的样子就是如此。这正是要以最高质量保留原图、并始终从原图导出衍生版本而不是从导出稿再加工的原因。
这也意味着已经很小的文件未必还能有意义地压缩。如果一张图已经过一轮压缩器,再来一次往往是拿看得见的质量去换几 KB。在接受结果之前,先确认你实际省下了多少。
删掉你用不到的信息
照片会带上你很少想公开的元数据:相机型号、拍摄参数、时间戳,手机拍摄时还常常包含拍摄地点的 GPS 坐标。这既是体积,也是隐私问题,而且在应用之间复制也不会消失。
发布前的简短清单:
- 按图片实际显示的最大尺寸调整分辨率。
- 照片优先用 WebP;截图、标志和透明图保留 PNG。
- 尝试质量 75~85,并在显示尺寸而非放大状态下比较。
- 衍生版本一律从原图导出,不要从已压缩的副本再加工。
- 公开的图片要清除 EXIF 元数据,尤其是位置信息。