AVIF Mime 类型

AVIF 图像使用的内容类型(又名 Mime 类型)是 image/webp,标准文件扩展名是 .avif。

AV1 或者 AVIF 是一种新的图像压缩格式,通常会生成比 WebP、JPEG 和 PNG 更小的文件大小;低多少取决于用于将图像保存或者转换为 AVIF 的设置。
通过使用 AVIF,我们可能会遇到比 WebP 低约 20% 和比 JPEG 低约 50% 的文件大小。

AVIF 文件的典型标头响应可能如下所示:

HTTP/1.1 200 OK
content-type: image/avif
content-length: 14200

从 PHP 提供图像/avif 内容类型:

header('content-type: image/avif');
echo $image_data;
exit();

将图像转换为avif

图像目前还不能直接从 PHP 转换为 AVIF,但我们仍然可以通过调用外部命令(例如 ImageMagick 套件中的 convert 命令)来转换图像;为此,我们可以使用 shell_exec 函数:

shell_exec('convert my-image-file.jpg -quality 50% my-image-file.avif');

请记住转义命令的相关部分:

$path = '/var/www/mysite/images/my-image-file.jpg';
$avif_server_loc = '/var/www/mysite/images/my-image-file.avif';
shell_exec('convert ' . escapeshellcmd($path . ' -quality 50% ' . $avif_server_loc));

在尝试转换文件之前检查文件是否存在时,可能不需要转义,但是,这仍然是一个很好的做法。

检测结果

为了测试转换为 AVIF 时会压缩多少图像,我在 Linux 中使用了 ImageMagick convert 命令;这可以像这样执行:

convert my-image.jpg -quality 50% my-image.avif

我发现通常 AVIF 可能比 WebP 小约 20%,比 JPEG 小近 50%。

PNG文件

但是,当我尝试直接转换 PNG 文件时,其中一些文件在转换为 AVIF 时实际上会变大;原因不明。
也许是由于我用于转换的工具。

原因可能是结果将取决于图像内容的大小和复杂性。
但是,如果我先将文件转换为 WebP,然后再转换为 PNG,那么在某些情况下我能够将文件大小减少近 20%。

由于与 PNG 图像的结果不一致,我决定在我的文件处理程序类中简单地禁用 PNG 的自动转换。

此外,如果我们已经使用 optipng、pngcrush 或者 advpng 等工具对其进行了压缩,那么其中一些文件已经进行了高度优化。

不应转换的文件

PNG、GIF 和 SVG 等文件可能不应该转换,因为它们有些特殊,具体取决于具体情况。
从技术上讲 .svg 是基于矢量的,因此我们可能很少希望将它们转换为光栅格式,例如 .avif。

问题是 .gif 文件是动画的,我不确定浏览器对 .webp 或者 .avif 动画的支持程度;我只是还没有测试过。

前面提到过,将.png 文件直接转换为.avif 时似乎也存在问题,导致转换后的文件的文件大小变得比原始文件大。

.webp 和 .avif 都支持 alpha 透明度,所以至少这似乎不是问题。

日期:2020-06-02 22:17:22 来源:oir作者:oir