AVIF是基于开源的视频格式AV1的新型图片格式,由于开源免费且性能表现优异,目前得到了几乎所有浏览器大厂的支持,已经成为下一代图片格式的发展趋势。
一、PHP8.1开始支持AVIF图片格式
如果想要在PHP程序中使用AVIF图片格式,需要把你的PHP版本升级到PHP8.1。
PHP的两大图片扩展,GD库和ImageMagick扩展都已经支持AVIF。从目前情况来看,安装配置的时候GD库个人感觉麻烦一些。
二、GD库扩展支持AVIF图片格式
大家熟知的GD扩展,依赖于 libavif 包来提供底层的AVIF编解码器。GD扩展需要libavif版本0.8.2以上。
Ubuntu/Debian系统使用以下命令安装libavif包
apt install libavif-dev
RHEL/Fedora/CentOS系统使用以下命令安装libavif包
dnf install libavif-devel
安装好依赖项后,需要开启GD拓展的同时,附带上对于AVIF的支持。
可以使用 ./configure 脚本中新的 --with-avif 标志在 AVIF 支持下编译 PHP。
./buildconf --force
./configure --enable-gd --with-avif
请注意,上面的 ./configure 命令只是一个实例。
对于生产系统,请确保也启用其他扩展,尽量使用Docker来确保开发和生产环境的配置一样。
很多集成环境,例如宝塔面板,目前就算你的PHP版本是8.1以上,如果你安装了GD扩展,你也是没办法使用AVIF图片格式的,还没有给扩展上。
三、ImageMagick扩展已经支持avif扩展
如果你的PHP程序使用ImageMagick扩展,直接就可以处理AVIF格式图片了。本人gd库编译到一半直接放弃了,改用ImageMagick扩展。
四、额外提醒,PHP8.1对AVIF格式的支持并不完善,建议直接安装PHP8.2+
PHP中用于获取AVIF图片尺寸等信息的 getimagesize()函数,在PHP8.1下无法获取AVIF图片格式的尺寸等信息。
图片的宽高,位宽,通道,尺寸等信息,都无法获取,8.2才得以支持。
最后附加AVIF图片格式的优缺点
画质最强的图片格式,依然是PNG。支持几乎无限的图片尺寸,对HDR和宽色域的支持。缺点也是十分明显的,体积庞大。
AVIF图片格式大概比JPEG小三分之一,对于互联网来说这个体积的诱惑是无比巨大的。AVIF目前得到了,所有主流浏览器的支持,已经可以完全商业化使用了。
不过,需要注意AVIF最大支持8K分辨率的图片,不知道后续时候会改变这个,这里算AVIF和PNG的一个主要区别。AVIF同样支持444采样,以及HDR和宽色域,在游戏截图等领域,是可以部分替代PNG的。
AVIF是开源的格式,没有专利费的困扰,而且得到了所有主流大厂的支持。
总而言之,AVIF格式绝对是站长福音,尤其是大量图片的网站,对减少存储空间和带宽流量,加快访问速度有很大优势。