1. 简介
平均而言,加载网页所需的字节数中,超过 60% 是图片。使用 AVIF 可以减小图片大小,并加快网站加载速度。
什么是 AVIF?
AVIF 是一种从 AV1 视频比特流派生的图片格式。AVIF 旨在提高压缩效率。
为什么选择 AVIF?
AVIF 图片比 JPEG、PNG、GIF 或 WebP 图片小得多,但质量却相同甚至更好。
学习内容
- 如何根据图片创建 AVIF 图片
- 如何在网页中渲染 AVIF 图片
所需条件
2. 使用 Squoosh 创建 AVIF 图片
Squoosh 是一款图片压缩 Web 应用。借助 Squoosh,您可以轻松地将图片压缩为 AVIF 图片。
- 打开 https://squoosh.app
- 将本地图片拖放到 Squoosh 中。

- 从“压缩”下拉框中选择 AVIF。

然后,Squoosh 会将您的图片压缩为 AVIF 图片。Squoosh 完成后,会在右下角显示一个下载按钮,其中包含一些有关 AVIF 图片的统计信息。

原始示例图片的大小为 3340 kB,压缩后的图片大小为 378 kB。压缩后的示例图片比原始图片小了近 10 倍!
- 下载 AVIF 图片
点击下载按钮,AVIF 图片将保存到您的本地硬盘。
您现在就拥有自己的 AVIF 图片了!
3. 构建命令行编码器 avifenc
avifenc 是一款命令行应用,可将 PNG 和 JPEG 图片转换为 AVIF 图片。avifenc 使用 libavif,后者是一个可解码和编码 AVIF 图片的库。如果您有很多图片要转换为 AVIF 格式,那么使用命令行编码器 avifenc 可能是个不错的选择。
- 获取验证码。
git clone https://github.com/AOMediaCodec/libavif.git
- 将目录更改为 libavif。
cd libavif/
您可以通过多种不同的方式配置 avifenc 和 libavif 以进行构建。如需了解详情,请访问 libavif。我们将构建 avifenc,使其静态链接到 libaom 编码器、dav1d 解码器和 libyuv 处理库。
- 构建命令行编码工具 avifenc。
最好为 avifenc 创建一个 build 目录。
mkdir build
切换到 build 目录。
cd build
为 avifenc 创建 build 文件。
cmake -DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL -DAVIF_LIBYUV=LOCAL -DBUILD_SHARED_LIBS=OFF -DAVIF_BUILD_APPS=ON ../
构建 avifenc。
make
您已成功构建 avifenc!
4. 使用 avifenc 创建 AVIF 图像
- 使用默认设置创建 AVIF 图片。
运行 avifenc 的最基本参数是设置输入和输出文件。
./avifenc happy_dog.jpg example.avif
您现在拥有了自己的第二张 AVIF 图片!
- 更改 AVIF 编码的质量。
通常情况下,您可能只想更改 AVIF 编码的 quality 参数。quality 是一个参数,用于在压缩图片的质量与文件大小之间进行权衡。例如,高画质文件 (-q 90) 比低品质文件 (-q 20) 大得多,但高画质文件的效果会好得多。
5. 在网页中渲染 AVIF 图片。
现在,让我们向全世界展示您的所有努力。
- 创建网页以提供 AVIF 图像。
创建一个名为 avif_example.html 的文件。
在文本编辑器中打开 avif_example.html,然后输入以下代码:
<html>
<head>
<title>AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="example.avif" />
<img src="happy_dog.jpg" />
</picture>
</body>
</html>
将源文件(在本例中为 happy_dog.jpg)和 AVIF 文件 (eaxmple.avif) 复制到与 avif_example.html 相同的目录中。
我们使用 picture 元素来呈现 AVIF 图片(如果浏览器支持 AVIF),如果浏览器不支持 AVIF,则回退到 JPEG。如需详细了解 picture 元素,请点击此处。
- 在 Chrome 中打开网页。
打开 HTML 文件的一种方法是将 avif_example.html 拖动到 Chrome 中。打开 HTML 文件的另一种方法是从 HTTP 服务器提供 avif_example.html。
现在,您的 AVIF 图片应该会在 Chrome 中呈现。您可以右键点击图片并选择 Save image as... 来测试此功能,系统应会打开一个包含 example.avif 的对话框。另一种方法是打开 Chrome 开发者工具,查看 example.avif 是否已下载。
6. 使用 FFmpeg 创建 AVIF 动画图片
- 创建 AVIF 动画图片。
运行此命令可从 y4m 文件创建动画 AVIF 图像。
ffmpeg -i ice_qcif_15fps.y4m animated.avif
现在,您就拥有自己的动画 AVIF 图片了!
- 在网页中呈现动画 AVIF 图片。
创建一个名为 avif_animated_example.html 的文件。
在文本编辑器中打开 avif_animated_example.html,然后输入以下代码:
<html>
<head>
<title>Animated AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="animated.avif" />
<img src="ice_qcif_15fps.gif" />
</picture>
</body>
</html>
将源文件(在上述示例中为 ice_qcif_15fps.gif)和 AVIF 文件 (animated.avif) 复制到与 avif_animated_example.html 相同的目录中。
- 在 Chrome 中打开网页。
打开 HTML 文件的一种方法是将 avif_animated_example.html 拖动到 Chrome 中。打开 HTML 文件的另一种方法是从 HTTP 服务器提供 avif_animated_example.html。
现在,您的动画 AVIF 图片应该会在 Chrome 中呈现。
如果使用提供的示例媒体,则应大致如下所示:

您可以右键点击图片并选择 Save image as... 来测试这是否为动画 AVIF 图片,这应该会打开一个包含 animated.avif 的对话框。另一种方法是打开 Chrome 开发者工具,查看 animated.avif 是否已下载。
7. 使用 avifenc 创建动画 AVIF 图片
- 将源媒体转换为 y4m 格式。
avifenc 支持将 y4m 作为输入来创建动画 AVIF 图片。如需创建 y4m 文件,一个不错的选择是使用 FFmpeg。
ffmpeg -i input.gif -pix_fmt yuvj444p -f yuv4mpegpipe output.y4m
- 创建 AVIF 动画图片。
运行此命令可从 y4m 文件创建动画 AVIF 图像。
./avifenc ice_qcif_15fps.y4m animated.avif
现在,您就拥有自己的第二张动画 AVIF 图片了!
- 在网页中呈现动画 AVIF 图片。
创建一个名为 avif_animated_example.html 的文件。
在文本编辑器中打开 avif_animated_example.html,然后输入以下代码:
<html>
<head>
<title>Animated AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="animated.avif" />
<img src="ice_qcif_15fps.gif" />
</picture>
</body>
</html>
将源文件(在上述示例中为 ice_qcif_15fps.gif)和 AVIF 文件 (animated.avif) 复制到与 avif_animated_example.html 相同的目录中。
- 在 Chrome 中打开网页。
打开 HTML 文件的一种方法是将 avif_animated_example.html 拖动到 Chrome 中。打开 HTML 文件的另一种方法是从 HTTP 服务器提供 avif_animated_example.html。
现在,您的动画 AVIF 图片应该会在 Chrome 中呈现。
如果使用提供的示例媒体,则应如下所示:

您可以右键点击图片并选择 Save image as... 来测试这是否为动画 AVIF 图片,这应该会打开一个包含 animated.avif 的对话框。另一种方法是打开 Chrome 开发者工具,查看 animated.avif 是否已下载。
- 更改 AVIF 编码的质量。
ice_qcif_15fps.gif 文件的大小约为前者的 7 倍,但质量却差得多。您可以将质量参数更改为 20,从而更改 AVIF 的质量,使其大致与 ice_qcif_15fps.gif 的质量相匹配。
./avifenc -q 20 ice_qcif_15fps.y4m animated.avif
现在,动画 AVIF 文件和 ice_qcif_15fps.gif 的质量大致相同,但 GIF 文件的大小约为前者的 22 倍。
8. 恭喜!
您已完成“提供 AVIF 图片”代码实验!
希望您清楚了解 AVIF 如何帮助您缩小图片大小,并更高效地通过网络传输图片。您可以参阅 Jake Archibald 的精彩博文,详细了解 AVIF 的功能。