AVIF是基于开源的视频格式AV1的图片格式,由于开源免费得到了几乎所有浏览器大厂的支持,已经成为下一代图片格式的王者。目前LoserHub网站正在重写图片处理的相关程序,把原来JPEG和PNG的图片,全部转换成AVIF格式。把自己的一点经验心得,PHP程序中如何使用AVIF图片格式分享给大家。
第一:PHP8.1开始支持AVIF图片格式
如果想要在PHP程序中使用AVIF图片格式,需要把你的PHP版本升级到PHP8.1。
PHP的两大图片扩展,GD和ImageMagick都已经支持AVIF。但是,使用起来稍微有点不同。
第二: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常用的Laradock的GD扩展,默认就是没有打开AVIF的。就算你的PHP版本是8.1以上,如果你安装了GD扩展,你也是没办法使用AVIF图片格式的。
不过,我会尽快提交PR,更新Laradock。让最新版的Laradock默认在PHP8以上,开启AVIF图片格式的支持。
第三:ImageMagick扩展直接就支持
如果你的PHP程序碰巧也安装了ImageMagick扩展,恭喜你,你直接就可以使用AVIF图片格式了。而不需要去重新编译GD,支持AVIF。
我就是运气好,同时安装了GD扩展和ImageMagick扩展。
第四:PHP8.1对AVIF格式的支持有一个重大的BUG
这个BUG并不来自于扩展,而是PHP中用于获取AVIF图片尺寸等信息的 getimagesize()函数,在PHP8.1下无法获取AVIF图片格式的尺寸等信息。
图片的宽高,位宽,通道,尺寸等信息,都无法获取。最TM神奇的是,这个BUG在PHP8.2下修复了,但是PHP8.1下没有修复。我搞不懂,这是因为什么。
你在PHP8.1下支持AVIF图片格式,但是搞了这么大一个BUG,以至于在PHP8.1下无法使用。
像Phalcon这些框架至今不支持PHP8.2,所以大量的程序现在是无法使用AVIF图片格式的。等到框架和所有的依赖都支持PHP8.2,都不知道猴年马月了。
所以,在确定使用AVIF之前,一定要调查清楚你的程序能否升级到PHP8.2。所以像我这样无视BUG,在无法获取图片大小的情况下,先升级到AVIF再说。
等以后升级到PHP8.2以后,再写程序批量修改图片信息。
详细信息看一看PHP官网:https://www.php.net/manual/zh/function.getimagesize.php
PHP8.2.0首先修复了这个蛋疼的BUG, 现在将正确返回 AVIF 图像的实际尺寸、bits 和 channels;以前,尺寸报告为 0x0
,并且不会报告 bits 和 channels。
第五:最后说说AVIF图片格式的优缺点
画质最强的图片格式,依然是PNG。支持几乎无限的图片尺寸,对HDR和宽色域的支持。缺点也是十分明显的,体积庞大。Xbox游戏机系统自带的截图功能,默认就是PNG格式。单张4K图片的大小在,15MB左右。微软是不会在这个地方妥协的。
AVIF图片格式大概比JPEG小三分之一,对于互联网来说这个体积的诱惑是无比巨大的。AVIF目前得到了,所有主流浏览器的支持,已经可以完全商业化使用了。
不过,需要注意AVIF最大支持8K分辨率的图片,不知道后续时候会改变这个,这里算AVIF和PNG的一个主要区别。AVIF同样支持444采样,以及HDR和宽色域,在游戏截图等领域,是可以部分替代PNG的。
AVIF是开源的格式,没有专利费的困扰,而且得到了所有主流大厂的支持。
第六:Windows下无法显示AVIF图片的问题
去微软商城下载AV1的视频播放插件,就可以了,不会影响到你把Windows当作开发环境。
第七:微软的Edge浏览器默认暂不支持AVIF图片
需要在启动的时候添加以下命令,使Edge开启对AVIF的支持。
--enable-features=msEdgeAVIF
微软将在2023年6月的更新中,正式支持AVIF图片。
总结
PHP对于AVIF的支持,真的是让人感觉有点蛋疼。不过,这不妨碍我投身AVIF的怀抱。JPEG可以直接抛弃了,AVIF就是下个时代的主流图片格式了。
语言: zh-CN
创建时间: 2023-05-19 20:50:44
更新时间: 2023-06-02 03:21:20
翻译人员:
原作者:
转载地址:
源网址:
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。