Fórum Root.cz
Hlavní témata => Server => Téma založeno: Michal Švarc 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í
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
-
magick identify -list format
vypíše avif?
-
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.
-
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é.
-
magick identify -list format
vypíše avif?
Ano, vypíše.
AVIF HEIC rw+ AV1 Image File Format (1.17.6)
-
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
apt remove "*imagemagick*" --purge -y && apt autoremove --purge -y
Pak jsem nainstaloval imagick pomocí
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make test
make install
pak jsem v adresáři
/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
extension=/usr/lib/php/20210902/imagick.so
v adresáři
/etc/php/8.1/fpm/conf.d
vytvořil link na ten soubor
ln -s /etc/php/8.1/mods-available/imagick.ini 20-imagick.ini
načež jsem restartoval apače a pro jistotu i php
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
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:
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.
-
Samozřejmě nejsem na stejným systemu jako ty...
po kompilaci
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,..
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
-
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á
<?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.
-
A co přesně je myšleno tímhle?
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
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,..
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
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í
libheif1/focal,now 1.6.1-1build1 amd64 [installed,automatic]
php -i | grep ImageMagick
u mě nezobrazí vůbec nic
-
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).