3、图片格式选择:JPEG、PNG、WebP、AVIF的适用场景与压缩权衡

图片格式选不对,页面切换再优化也是白搭。我见过太多团队,优化了半天加载速度,结果一张 PNG 大图直接把内存撑爆。今天咱们就把 JPEG、PNG、WebP、AVIF 这四种格式聊透。

核心原则:没有最好的格式,只有最合适的场景。选格式就是在文件体积、显示质量、解码速度和兼容性之间做权衡。

图片格式选择决策树 需要透明度? 是 → 需要无损? PNG-24 / WebP无损 PNG-8 / WebP有损 否 → 照片/渐变? JPEG / WebP有损 AVIF(最佳) 决策要点 • 有透明度需求 → 排除 JPEG/AVIF,选 PNG 或 WebP • 照片类内容 → 优先 WebP/AVIF,兼容方案用 JPEG • 图标/UI元素 → 考虑 SVG 或 CSS,其次 PNG-8

3.1 JPEG:老牌选手,照片首选

JPEG 这格式,说白了就是为照片而生的。它用有损压缩,能把一张几 MB 的照片压到几百 KB,肉眼还看不太出来区别。我在做电商项目时,商品主图清一色用的 JPEG,加载速度直接提了 40%。

特性 说明
压缩类型 有损压缩,可调节质量参数(0-100)
色彩深度 24位真彩色,1600万色
透明度 不支持
适用场景 照片、渐变背景、复杂色彩图片
浏览器兼容 所有浏览器,100%

我的经验:JPEG 质量参数设 80-85 是最佳平衡点。低于 70 会出现明显的块状伪影,高于 95 文件体积翻倍但画质提升微乎其微。我曾经为了省 10KB 把质量降到 60,结果被设计师追着骂了三天。

3.2 PNG:透明图标的守护神

PNG 分两种:PNG-8 和 PNG-24。PNG-8 最多 256 色,适合图标、Logo;PNG-24 支持真彩色和 Alpha 通道透明度。你想想看,一个带透明背景的 Logo,不用 PNG 还能用啥?

但 PNG 有个致命伤——文件体积大。一张 1920×1080 的 PNG 截图,轻松上 5MB。我在做后台管理系统时,用户上传的截图全是 PNG,首屏加载直接崩了。后来强制转 WebP,体积降了 70%。

特性 PNG-8 PNG-24
颜色数 最多256色 1600万色
压缩 无损 无损
透明度 支持(1位) 支持(8位Alpha)
文件大小 较小 较大
适用 图标、小UI元素 需要透明背景的高质量图片

避坑指南:千万不要用 PNG 存照片!我曾经接手过一个项目,所有商品图都是 PNG,单张 3-5MB,页面加载慢到用户直接关网页。换成 JPEG 后,体积降到 200KB,加载速度提升了 15 倍。

3.3 WebP:Google 的野心之作

WebP 是 Google 推出的格式,同时支持有损和无损压缩,还支持透明度。说白了,它想一统天下。实际效果也确实不错——同等画质下,WebP 比 JPEG 小 25-35%,比 PNG 小 50% 以上。

我记得在做一个移动端 H5 项目时,图片资源占了总流量的 80%。全部转成 WebP 后,流量直接砍半,用户满意度飙升。不过要注意,Safari 直到 iOS 14 才支持 WebP,之前得做降级处理。

对比项 WebP有损 WebP无损
压缩率 比JPEG小25-35% 比PNG小50%
透明度 支持 支持
解码速度 比JPEG慢10-20% 比PNG慢20-30%
兼容性 Chrome/Edge/Firefox/Safari 14+ 同上

实用建议:WebP 有损模式适合照片,质量参数设 75-85;无损模式适合需要透明度的图标。但解码速度比 JPEG 慢,CPU 性能差的设备上会有卡顿感。

3.4 AVIF:下一代格式,但生态未成熟

AVIF 是基于 AV1 视频编码的图片格式,压缩率比 WebP 还高 20-30%。我测试过一张 4K 照片:JPEG 2.3MB,WebP 1.5MB,AVIF 只有 900KB。画质几乎一样。

但 AVIF 有两个硬伤:一是解码速度慢,低端手机上解码一张 AVIF 要 100-200ms;二是兼容性差,Safari 16 才支持,IE 和旧版 Chrome 直接不认。目前只适合做渐进增强。

格式 文件大小(相对JPEG) 解码速度 兼容性
JPEG 基准(100%) 最快 100%
WebP 65-75% 中等 90%+
AVIF 45-55% 较慢 60%+

注意:AVIF 目前不适合做主格式。我建议把它作为 <picture> 元素的补充选项,浏览器支持就用,不支持就降级到 WebP 或 JPEG。

3.5 有损 vs 无损:怎么选?

这个选择题其实不难。有损压缩会丢掉一些图像信息,但文件小;无损压缩保留全部信息,但文件大。关键看你的图片用在哪。

  • 照片、背景图、商品图 → 有损压缩。人眼对高频细节不敏感,丢掉一点看不出来。
  • 图标、Logo、截图、UI元素 → 无损压缩。这些图有硬边缘和纯色区域,有损压缩会产生锯齿和色块。
  • 医疗影像、设计稿、印刷素材 → 必须无损。丢一个像素都可能出问题。

我的习惯:在项目中我会用 <picture> 标签做多格式降级。先试 AVIF,不行就 WebP,再不行就 JPEG/PNG。这样既享受了新格式的体积优势,又保证了兼容性。

<picture>
  <source srcset="photo.avif" type="image/avif">
  <source srcset="photo.webp" type="image/webp">
  <img src="photo.jpg" alt="示例图片">
</picture>

3.6 实战选择策略

说了这么多,到底怎么选?我总结了一个简单粗暴的规则:

  1. 照片类内容 → WebP(有损),降级 JPEG
  2. 带透明背景的图标/Logo → WebP(无损),降级 PNG-24
  3. 纯色图标/小UI元素 → 优先考虑 SVG 或 CSS,其次 PNG-8
  4. 截图/文档扫描件 → PNG-24 或 WebP 无损
  5. 需要极致压缩的场景 → AVIF,做好降级

最后说一句:格式选择不是一劳永逸的事。浏览器在进化,新格式在出现,你的选择策略也要跟着更新。但核心原则不变——在体积、质量、兼容性之间找到最适合你项目的平衡点。