Zprovoznění podpory image/avif v PHP 8.1

Zprovoznění podpory image/avif v PHP 8.1
« kdy: 23. 04. 2024, 06:02:28 »
Linux: Ubuntu 20.04

Nedávno, před pár týdny, jsem měl podobný problém, imagemagick prostě přestal převádět obrázky na avif. Tehdy jsem zjistil, že se nějak ztratila knihovna libavif, a nakonec jsem zkusil nainstalovat avif podporu pomocí https://github.com/AOMediaCodec/libavif , respektive https://github.com/AOMediaCodec/libavif#build-everything-from-scratch verzi, protože v balíčkovacím systému nic jako libavif již není a přestože jsem nepřišel na to proč, pár týdnů to fungovalo. Teď už zas ne, takže hledám, co by se dalo dělat.

Pro začátek, je potřeba mít na to knihovnu php8.1-imagick, nebo to jde i bez ní?

php8.1-imagick má u nás na serveru závislost na imagemagick-6-common libmagickcore-6.q16-6 libmagickwand-6.q16-6
a s tím ni aktuálně avif nefunguje

při php8.1-imagick nainstalovaném, jsem našel soubor /etc/php/8.1/fpm/conf.d/20-imagick.ini kde se dá změnit cesta, pomocí
Kód: [Vybrat]
extension=/usr/local/lib/ImageMagick-7.1.1/modules-Q16HDRI/coders/magick.so a adresář
/var/lib/php/modules/8.1/fpm/enabled_by_maint/ s prázdným souborem imagick

po odinstalaci zmíněných imagemagick-6* a tím i php8.1-imagick, které se jich drží jako klíště, byl soubor /etc/php/8.1/fpm/conf.d/20-imagick.ini smazán a prázdný soubor imagick se přesunul do /var/lib/php/modules/8.1/fpm/disabled_by_maint/

tak jsem si ten soubor vytvořil znovu a pro jistotu přesunul zpět i ten prázdný soubor

nevím, ale doufám, že by mi to mohlo v php8.1fpm pomoci používat tu verzi z imei, v phpinfo jsem nicméně nezaregistroval žádnou změnu


ETNyx

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #1 kdy: 23. 04. 2024, 12:17:13 »
Citace
magick identify -list format
vypíše avif?

RDa

  • *****
  • 2 673
    • Zobrazit profil
    • E-mail
Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #2 kdy: 23. 04. 2024, 14:57:14 »
https://github.com/ImageMagick/ImageMagick/discussions/4369

jako jestli v 2021 bylo avif historii.. a dodnes tam neni, asi bych uvazoval o smysluplnosti potreby pracovat s avif.

ETNyx

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #3 kdy: 23. 04. 2024, 20:01:09 »
jako jestli v 2021 bylo avif historii.. a dodnes tam neni, asi bych uvazoval o smysluplnosti potreby pracovat s avif.

Takže jaký moderní formát, který se dá široce používat, tedy doporučujete? Bohužel WebP oproti JPEG ztratilo některé vlastnosti, které AVIF má a získal nové.

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #4 kdy: 24. 04. 2024, 08:37:33 »
Citace
magick identify -list format
vypíše avif?
Ano, vypíše.
Kód: [Vybrat]
AVIF  HEIC      rw+   AV1 Image File Format (1.17.6)


Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #5 kdy: 24. 04. 2024, 10:40:57 »
Takže mám za to, že bez imagicku pro php to nejde, ale není třeba ho instalovat z balíčkovacího systému.
Vrátil jsem to vše do původního stavu, odinstaloval php8.1-imagick se všemi přidruženými balíčky pomocí příkazu uvedeného u IMEI
Kód: [Vybrat]
apt remove "*imagemagick*" --purge -y && apt autoremove --purge -yPak jsem nainstaloval imagick pomocí
Kód: [Vybrat]
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make test
make install
pak jsem v adresáři
Kód: [Vybrat]
/etc/php/8.1/mods-available  vytvořil soubor imagick.ini
a vložil do něj cestu k imagick.so, který se mi vytvořil
Kód: [Vybrat]
extension=/usr/lib/php/20210902/imagick.sov adresáři
Kód: [Vybrat]
/etc/php/8.1/fpm/conf.dvytvořil link na ten soubor
Kód: [Vybrat]
ln -s /etc/php/8.1/mods-available/imagick.ini 20-imagick.ininačež jsem restartoval apače a pro jistotu i php
Kód: [Vybrat]
systemctl reload apache2
systemctl reload php8.1-fpm
a phpinfo se tváří že avif podporuje, což předtím nedělalo, nicméně imagemagick7.1.1-31, ze kterého tu informaci bere stále avif nerad.

Přestože v `magick identify -list format` se ten formát vyskytuje
Kód: [Vybrat]
echo shell_exec("mogrify -quality 60 -resize 200x200 -format avif /var/www/webovyserver.xz/web/data/**/*.jpeg 2>&1");
echo shell_exec('mogrify -quality 50 -resize 30x30 -path /var/www/webovyserver.xz/web/data/min/0 /var/www/webovyserver.xz/web/data/0/*O.avif 2>&1');
se tváří takhle:
Kód: [Vybrat]
mogrify: unable to open image 'avif:': No such file or directory @ error/blob.c/OpenBlob/3571.
mogrify: unrecognized image format `avif' @ error/mogrify.c/MogrifyImageCommand/4952.
mogrify: no decode delegate for this image format `AVIF' @ error/constitute.c/ReadImage/746.
Vzhledem k tomu že imagick pro php byl generován na základě tohohle imagemagicku, nepředpokládám že by šel.
« Poslední změna: 24. 04. 2024, 10:49:28 od Michal Švarc »

ETNyx

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #6 kdy: 25. 04. 2024, 10:36:42 »
Samozřejmě nejsem na stejným systemu jako ty...

po kompilaci

Kód: [Vybrat]
php -i | grep ImageMagick

Imagick compiled with ImageMagick version => ImageMagick 7.1.1-30 Q16-HDRI x86_64 22086 https://imagemagick.org
Imagick using ImageMagick library version => ImageMagick 7.1.1-30 Q16-HDRI x86_64 22086 https://imagemagick.org
ImageMagick copyright => (C) 1999 ImageMagick Studio LLC
ImageMagick release date => 2024-04-07
ImageMagick number of supported formats:  => 272
ImageMagick supported formats => ... AVIF, ....

i ten tvů exec chyby nehází,..

máš nainstalovaný libheif? Mají tam nějaky devel prostředí v dockeru koukni na `docker/developing/Dockerfile` a zřejmě místo libavif používají libheif jako dekoder. Já mám oboje v systemu,..

Kód: [Vybrat]
libavif 1.0.4-2 [installed] Library for encoding and decoding .avif files
libheif 1.17.6-5 [installed] An HEIF and AVIF file format decoder and encoder

ETNyx

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #7 kdy: 25. 04. 2024, 14:56:54 »
Takže mám za to, že bez imagicku pro php to nejde,

A co přesně je myšleno tímhle?

Do avif se dá konvertovat i v rámcí GD knihovny, ta by na imagick neměla být závislá

Kód: [Vybrat]
<?php
$image 
imagecreatefromjpeg('test.jpg');  
imageavif($image'test.avif');

je tam ještě podmínka na verzi PHP, ale to by pro tebe neměl být problém.

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #8 kdy: 26. 04. 2024, 09:25:09 »
A co přesně je myšleno tímhle?
Kód: [Vybrat]
To jsem si (evidentně chybně), pokusil odpovědět na jednu z vlastních otázek.
Samozřejmě nejsem na stejným systemu jako ty...
po kompilaci
Kód: [Vybrat]
php -i | grep ImageMagick
...
i ten tvů exec chyby nehází,..

máš nainstalovaný libheif? Mají tam nějaky devel prostředí v dockeru koukni na `docker/developing/Dockerfile` a zřejmě místo libavif používají libheif jako dekoder. Já mám oboje v systemu,..

Kód: [Vybrat]
libavif 1.0.4-2 [installed] Library for encoding and decoding .avif files
libheif 1.17.6-5 [installed] An HEIF and AVIF file format decoder and encoder
Kód: [Vybrat]
libavif mám akorát tuhle https://github.com/AOMediaCodec/libavif (1.0.4), buď nemám nějaký potřebný repositář, nebo Ubuntu 20.04 aktuálně liavif z balíčkovacího systému nenabízí
Kód: [Vybrat]
libheif1/focal,now 1.6.1-1build1 amd64 [installed,automatic]
Kód: [Vybrat]
php -i | grep ImageMagicku mě nezobrazí vůbec nic

Re:Zprovoznění podpory image/avif v PHP 8.1
« Odpověď #9 kdy: 30. 04. 2024, 07:08:54 »
Pochybuji, že to někomu pomůže, ale uzavřel bych to tím, že můj problém spočíval v první fázi v použití balíků pro ubuntu, kde je tak či tak zastaralá verze ImageMagicku6 a v druhé, při řešení problému, v používání tak staré verze IMEI (otázka na od/re/instalaci: https://forum.root.cz/index.php?sid-forum=5lq6jkksk09odhrse0pj5nkl16&topic=28974.0), že bylo skoro s podivem, že se to nerozbilo dříve. Po jejím odebrání a instalaci krz nejnovější verzi instalátoru, mi převody do avifu již fungují.

Mým největším problémem byl neexistující update částí, co nejsou součástí balíčkovacího systému apt (tedy instalace jako: configure, make, make install).