AVIF 图片格式完全指南:比 WebP 再小 30% 的下一代图片格式
AVIF:图片压缩的新王者
AVIF(AV1 Image File Format)基于 AV1 视频编码技术,是 WebP 之后的下一代图片格式。
| 格式 | 编解码器 | 同质量体积 | 浏览器支持 |
|---|---|---|---|
| JPEG | libjpeg | 基准 | 全部 |
| WebP | VP8 | -25~35% | 97%+ |
| AVIF | AV1 | -50~60% | 92%+ |
| PNG | deflate | 3-5x JPEG | 全部 |
关键数据:同等 SSIM 质量下,AVIF 比 WebP 再小 20-30%,比 JPEG 小 50-60%。
为什么 AVIF 这么小?
AV1 编码的优势
- 帧内预测:利用图片内部的空间冗余
- 变换编码:支持 4×4 到 64×64 的变换块
- 量化矩阵:更精细的频率域量化
- Film Grain 合成:分离胶片颗粒,用参数描述而非像素存储
有损 vs 无损
| 模式 | 体积对比 | 适用场景 |
|---|---|---|
| 有损 (CQ 30) | JPEG 的 40% | 照片、截图 |
| 有损 (CQ 50) | JPEG 的 25% | 缩略图、预览 |
| 无损 | PNG 的 50-60% | 图标、UI 素材 |
| 有损 + Alpha | PNG 的 30% | 需透明度的照片 |
浏览器兼容性(2026 年)
| 浏览器 | AVIF 支持 | 版本 |
|---|---|---|
| Chrome | ✅ | 85+ |
| Firefox | ✅ | 93+ |
| Safari | ✅ | 16+ |
| Edge | ✅ | 85+ |
| Samsung Internet | ✅ | 15+ |
| IE | ❌ | 不支持 |
覆盖率 92%+,可放心用于生产环境。
降级策略
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="照片" loading="lazy">
</picture>
浏览器按顺序选择第一个支持的格式。
使用工具库转换 AVIF
操作步骤
- 打开 图片格式转换工具
- 上传图片(支持 JPG、PNG、WebP、GIF)
- 选择输出格式为 AVIF
- 调整质量参数:
- 高质量 (CQ 20-30):几乎无损,体积减 40-50%
- 均衡 (CQ 35-50):适合大多数场景,体积减 50-60%
- 高压缩 (CQ 55-70):缩略图/预览,体积减 60-80%
- 下载转换结果
转换效果参考
| 原图 | 原始大小 | AVIF (CQ 35) | 压缩率 | SSIM |
|---|---|---|---|---|
| 风景照片 (4K) | 8.2MB | 1.1MB | 87% | 0.95 |
| 人像照片 | 3.5MB | 0.5MB | 86% | 0.94 |
| UI 截图 | 1.2MB | 0.15MB | 88% | 0.97 |
| 图标 (PNG+Alpha) | 45KB | 12KB | 73% | 1.00 |
AVIF 的特殊能力
Alpha 通道(透明度)
AVIF 支持有损 + Alpha 通道,这是 JPEG 不具备的:
PNG (透明) 45KB → AVIF (透明, CQ 35) 12KB → 体积减 73%
HDR / 宽色域
AVIF 支持 PQ 和 HLG 两种 HDR 传递函数,以及 BT.2020 宽色域:
| 特性 | JPEG | WebP | AVIF |
|---|---|---|---|
| 色深 | 8-bit | 8-bit | 8/10/12-bit |
| 色域 | sRGB | sRGB | sRGB / BT.2020 |
| HDR | ❌ | ❌ | ✅ PQ/HLG |
| Alpha | ❌ | ✅ | ✅ |
动画
AVIF 支持动画序列(AVIS),类似动画 WebP:
动画 GIF 2.5MB → 动画 WebP 0.8MB → 动画 AVIF 0.5MB
命令行转换
使用 libavif (avifenc)
# 安装
# macOS: brew install libavif
# Ubuntu: apt install libavif-bin
# 基础转换
avifenc input.jpg output.avif
# 指定质量 (0-63, 越小质量越高)
avifenc -q 30 input.jpg output.avif
# 无损压缩
avifenc --lossless input.png output.avif
# 指定速度 (0-10, 越慢压缩越好)
avifenc -q 35 -s 6 input.jpg output.avif
使用 ImageMagick
# 转换为 AVIF
magick input.jpg -quality 65 output.avif
# 批量转换
magick mogrify -format avif -quality 65 *.jpg
Nginx 自动转换
# 动态将 JPEG 转为 AVIF 返回
map $http_accept $avif_suffix {
"~*image/avif" ".avif";
}
server {
location ~* ^/.+\.(png|jpg|jpeg)$ {
add_header Vary Accept;
try_files $uri$avif_suffix $uri =404;
}
}
客户端支持 AVIF 时,自动返回 .avif 版本(需预生成)。
最佳实践
- 使用
<picture>降级:AVIF → WebP → JPEG 三级降级 - 质量参数选 35-50:大多数场景的最佳平衡点
- 预生成而非动态转换:构建时生成,避免服务端 CPU 开销
- 照片用 AVIF,图标用 SVG:矢量图不适合 AVIF
- Alpha 图片用 AVIF:替代 PNG,体积减 70%+
- CDN 配置自动转换:Cloudflare Image Resizing / CloudFront 支持按 Accept 头自动返回 AVIF
#AVIF#图片格式#WebP#压缩#图片优化