← 返回博客首页

图片格式选型:WebP 与 AVIF 的压缩率、透明度代价与兼容边界

图片格式的选择被一个误区困住:以为「PNG 是万能的、压缩一下就行」。实际上格式选错的代价远大于压缩参数。同一张图,PNG 与 WebP 的体积能差三倍;而 PNG 与 JPEG 的差距能到十倍。

本文按「场景 → 格式」给出规则,站内 图片格式转换工具 与 图片压缩工具 可以直接做文中所有转换。

四种格式的本质差异

格式 压缩方式 透明 适合
PNG 无损(DEFLATE) ✅ 8/24/32 位 图标、截图、文字图、需透明
JPEG 有损(DCT) ❌ 照片、渐变、背景图
WebP 有损或无损 ✅ 通用首选
AVIF 有损或无损 ✅ 极致压缩、渐进增强

关键差异在压缩方式:无损(PNG/WebP 无损模式)能完美还原每个像素,适合像素画的图;有损(JPEG/WebP 有损模式)通过丢弃人眼不敏感的高频信息换取体积,照片能压到十分之一,但细节永久丢失。

这就是为什么「PNG 怎么压都还是很大」—— PNG 的无损算法对渐变和噪点几乎无效。

选型规则:看图不看扩展名

判断用哪种格式只有一个问题:图里有没有大量连续的纯色区域?

有 → PNG(甚至更好:转 SVG) 截图、图标、按钮、文字图、图表、简笔画。这类图 PNG 的无损压缩非常高效,一张 512×512 的图标 PNG 可能只有 3KB。

没有 → JPEG / WebP / AVIF 照片、渐变背景、噪点丰富的插画。这类图在 PNG 下往往比原图还大(因为噪声让行程编码失效)。

这张表是本站所有图片处理工具的底层判断依据 —— 图片压缩工具 实际上就是按此选择 PNG 无损还是 JPEG 有损。

透明度是有代价的

PNG 的 8 位(256 色)模式只支持全透明或不透明;32 位(RGBA)才支持半透明,体积翻倍。JPEG 根本没有透明通道。

所以「PNG 转 JPEG 之后背景变黑了」不是 bug —— JPEG 无处存放 alpha 通道,转换工具通常直接丢弃或填充单色。处理办法:

  • 确实需要透明 → 保持 PNG,或用 WebP/AVIF(它们同时支持透明与高压缩率)
  • 不需要透明但想压 PNG → 降到 8 位索引色,或转 WebP 无损

动画:不要无脑转 WebP

这是最容易被忽略的坑。动图从 GIF 转 WebP 常常变大而不是变小。

原因:GIF 用 LZW 压缩调色板,帧之间不做差分,体积固定;WebP 动图的帧间预测在简单动画(位移、淡入淡出)上效果很好,但在大面积变化的动画上会失效——预测失败时反而要为每帧存完整图像。

实测规律:

  • 循环简单动画(loading、emoji)→ WebP 或 AVIF 通常小 30%–50%
  • 逐帧变化的复杂动画(手绘、粒子效果)→ 保持 GIF,或改用视频格式

本站的 GIF 压缩工具 与 图片转 GIF 可以对比两者的实际体积。

转换的时机:不要反复转

有损压缩的损失是累积的。正确流程是:

  1. 保留一份无损母版(PNG 或原始格式)
  2. 从母版一次性转到目标格式(WebP/AVIF/JPEG),质量设 90 左右
  3. 之后所有的缩放、加水印、裁剪都在母版上做,不要在已压缩的图上继续加工

反模式:JPG → 加水印 → 存为 JPEG → 缩放 → 存为 JPEG。每一步都有损失,四步之后画质明显劣化。

另一个坑:转格式可能丢失 EXIF 方向信息。手机竖拍的照片在 EXIF 里记录了「需要旋转 90 度」,部分转换工具会丢掉这个标记,结果是「转完照片躺下了」。本站的 图片裁剪工具 会先读取 EXIF 方向再应用变换,避免这个问题。

尺寸:先缩小再压缩

一条容易被忽略但收益很大的规则:压缩前先按显示尺寸缩小。

用户的实际需求往往是「显示 400px 宽」,但图片是 4000px 宽。按 4000px 压缩再让浏览器缩小,浪费了 90% 的像素。

顺序应该是:缩放到目标尺寸 → 一次转格式 + 压缩。本站的 图片尺寸调整工具 可以先做缩放。

一张选型表

用途 推荐格式 理由
网站图标 SVG 优先,PNG 兜底 矢量无损缩放,任意尺寸清晰
界面截图 PNG 或 WebP 无损 需要文字清晰
内容照片 WebP + AVIF 渐进增强 通用兼容 + 最优压缩
背景装饰 JPEG 或 WebP 有损 不需要透明
需要透明的图片 WebP 或 AVIF 唯一同时兼顾透明与压缩
简单循环动画 WebP 动图 比 GIF 小 30%–50%
复杂逐帧动画 保持 GIF 或用视频 WebP 帧间预测会失效
桌面应用图标 ICO Windows 传统格式

自查清单

  • [ ] 按「有无大面积纯色」决定 PNG 还是 JPEG 系
  • [ ] 需要透明时不要转 JPEG(它没有 alpha 通道)
  • [ ] 动图先测体积,WebP 可能比 GIF 更大
  • [ ] 保留无损母版,压缩只做一次,不要链式转码
  • [ ] 转格式前确认 EXIF 方向信息不会被丢
  • [ ] 先缩放到显示尺寸,再压缩

可复现的实测结果

用本站的 图片格式转换工具 把同一张截图分别导出为 PNG、WebP、JPEG,可以直接对比三者的体积差异:PNG 通常最大但文字最清晰,WebP 明显更小且肉眼难辨差异,JPEG 最小但对文字图会出现可见的振铃伪影。再用 图片压缩工具 试同一张手机照片,会看到 PNG 几乎压不动而 JPEG 能压到十分之一——这正是「格式选错,压缩白费」的直观演示。


广告

常见问题

WebP 和 AVIF 该选哪个?

**默认选 WebP,需要极致压缩率才上 AVIF。** WebP 的兼容性已经接近满分(Chrome/Firefox/Edge/Safari 14+ 都支持),编码速度快(比 AVIF 快一个数量级),而 AVIF 虽然同画质下还能再小 20%–30%,但编码慢 10–20 倍,且在部分平台(尤其是较老的 Android 与一些国内小程序容器)仍有兼容问题。务实策略是:**WebP 作为主力,AVIF 作为渐进增强**——用 `<picture>` 标签同时提供 AVIF / WebP / 原图三种源,让浏览器自己挑。站点内的 [图片格式转换工具](/image-format-converter.html) 可以直接做这层转换。

为什么 PNG 转 JPEG 后体积小那么多?

因为两者用的压缩原理完全不同。PNG 用 **DEFLATE 无损压缩**,对像素做行程编码,同样的颜色区域能压得很好,但对**渐变和照片**效率很低(照片每像素略有差异,压不动)。JPEG 用 **DCT 有损压缩**,把图像分成 8×8 块做离散余弦变换,去掉人眼不敏感的高频信息,所以对照片极其高效,代价是**细节永久丢失**(每次转码都累积)。所以 PNG→JPEG 的正确姿势是:**一次性转换,不要反复转**。先在最高质量(quality 90 以上)转一次,之后的压缩与缩放都在这个基准上做。

PNG 怎么压缩都还是很大?

**因为 PNG 天生不适合照片。** 它的无损算法对渐变和噪声几乎无效——一张手机拍的 4000×3000 照片转 PNG 可能有 8MB,转 JPEG 只有 1MB。判断用哪���种格式的方法很简单:**看图片里有没有大量连续的纯色区域**。截图、图标、按钮、文字这类图 → PNG(甚至可以转成更小的 SVG);照片、渐变、噪点这类图 → JPEG/WebP/AVIF。另一个方向是**减少颜色数**:如果图片只有几百种颜色,转成 256 色的调色板 PNG(indexed color)能省 30%–60%。本站的 [图片压缩工具](/image-compressor.html) 会自动按图片类型选择合适的压缩策略。

← 返回博客首页