PHP8.1 - 如何让 imageavif() 工作?

use*_*341 5 php apache avif php-8.1

我最近将 PHP 版本升级到 8.1-fpm,并将 Debian 升级到 Bullseye。我在某处读到 Bullseye 附带 AVIF 支持,但是当我尝试使用imageavif(),出现以下错误:

\n
PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function imageavif()\n
Run Code Online (Sandbox Code Playgroud)\n

我在我的服务器上运行“php -i | grep AVIF”,它返回:

\n
ImageMagick supported formats => 3FR, 3G2, 3GP, AAI, AI, APNG, ART, ARW, AVI, AVIF, AVS, BGR, BGRA, BGRO, BIE, BMP, BMP2, BMP3, BRF, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CR3, CRW, CUR, CUT, DATA, DCM, DCR, DCX, DDS, DFONT, DNG, DPX, DXT1, DXT5, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, FAX, FILE, FITS, FRACTAL, FTP, FTS, G3, G4, GIF, GIF87, GRADIENT, GRAY, GRAYA, GROUP4, H, HALD, HDR, HEIC, HISTOGRAM, HRZ, HTM, HTML, HTTP, HTTPS, ICB, ICO, ICON, IIQ, INFO, INLINE, IPL, ISOBRL, ISOBRL6, J2C, J2K, JBG, JBIG, JNG, JNX, JP2, JPC, JPE, JPEG, JPG, JPM, JPS, JPT, JSON, K25, KDC, LABEL, M2V, M4V, MAC, MAGICK, MAP, MASK, MAT, MATTE, MEF, MIFF, MKV, MNG, MONO, MOV, MP4, MPC, MPG, MRW, MSL, MTV, MVG, NEF, NRW, NULL, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG00, PNG24, PNG32, PNG48, PNG64, PNG8, PNM, POCKETMOD, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RADIAL-GRADIENT, RAF, RAS, RAW, RGB, RGBA, RGBO, RGF, RLA, RLE, RMF, RW2, SCR, SCT, SFW, SGI, SHTML, SIX, SIXEL, SPARSE-COLOR, SR2, SRF, STEGANO, SUN, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UBRL6, UIL, UYVY, VDA, VICAR, VID, VIDEO, VIFF, VIPS, VST, WBMP, WEBM, WEBP, WMV, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, YCbCr, YCbCrA, YUV\n
Run Code Online (Sandbox Code Playgroud)\n

我怎样去imageavif()上班?我错过了什么吗?

\n

编辑:我运行了函数“print_r(gd_info());” 这是结果数组:

\n
Array\n(\n    [GD Version] => 2.3.0\n    [FreeType Support] => 1\n    [FreeType Linkage] => with freetype\n    [GIF Read Support] => 1\n    [GIF Create Support] => 1\n    [JPEG Support] => 1\n    [PNG Support] => 1\n    [WBMP Support] => 1\n    [XPM Support] => 1\n    [XBM Support] => 1\n    [WebP Support] => 1\n    [BMP Support] => 1\n    [AVIF Support] => \n    [TGA Read Support] => 1\n    [JIS-mapped Japanese Font Support] => \n)\n
Run Code Online (Sandbox Code Playgroud)\n

好像我有 GD,但未设置其 AVIF 支持。如何让它支持 AVIF?

\n

另外,我目前正在使用imagewebp()该功能,效果很好。

\n

编辑:感谢Nico Haase向我指出 Ond\xc5\x99ej Sur\xc3\xbd\ 的 PHP 存储库的 GitHub 问题 - https://github.com/oerdnj/deb.sury.org/issues/1641

\n

与此同时,我能做些什么来imageavif()上班,但又不会太过分,还是最好只是等待?

\n

小智 1

GD 扩展依赖于 libavif 包来提供底层 AVIF 编解码器。GD 扩展需要 libavif 版本 0.8.2 或更高版本。

Ubuntu/Debian

apt install libavif-dev
Run Code Online (Sandbox Code Playgroud)

RHEL/软呢帽

dnf install libavif-devel
Run Code Online (Sandbox Code Playgroud)

安装依赖项后,可以使用 ./configure 脚本中的新 --with-avif 标志使用 AVIF 支持来编译 PHP。

./buildconf --force
./configure --enable-gd --with-avif
Run Code Online (Sandbox Code Playgroud)

请注意,上面的 ./configure 命令只是一个示例;对于生产系统,请确保还启用其他扩展。

来源: https: //php.watch/versions/8.1/gd-avif