На моем сервере Ubuntu 18.04.1 LTS у меня установлены ImageMagick, Apache2, Php 7.2 и Php iMagick 3.4.3.
На терминале, convert -version
выходы:
Version: ImageMagick 7.0.8-12 Q16 x86_64 2018-10-14 https://imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib heic jbig jng jp2 jpeg lcms lqr lzma openexr pangocairo png ps raw rsvg tiff webp wmf x xml zlib
PhpInfo()
для выходов Imagick:
На терминале convert pic.x3f pic.jpg
отлично работает без ошибок и файл создан.
Однако через php-imagick и сервер apache2, $img = new Imagick('temp-upload-path');
для того же файла «pic.x3f» возвращается
Fatal error: Uncaught ImagickException: no decode delegate for this image format `XEF' @ error/constitute.c/ReadImage/556 in /var/www/html/Upload.php:45 Stack trace: #0 /var/www/html/Upload.php(45): Imagick->__construct('/tmp/phpvFoXK3') #1 {main} thrown in /var/www/html/Upload.php on line 45
То же самое верно для файлов для форматов MDC а также RAW, (Может быть прочитано в ImageMagick, но возвращает ошибку на iMagick от Php).
Также,
Форматы: DCR NRW ARW RW2 SR2 SRF KDC все они успешно прочитаны в ImageMagick, но при попытке прочитать и преобразовать их в Imagick от Php возвращается:
Fatal error: Uncaught ImagickException: TIFF directory is missing required "ImageLength" field. `MissingRequired' @ error/tiff.c/TIFFErrors/650 in /var/www/html/Upload.php:45 Stack trace: #0 /var/www/html/Upload.php(45): Imagick->__construct('/tmp/phpf9Rylo') #1 {main} thrown in /var/www/html/Upload.php on line 45
Похоже, что он не может прочитать их через PHP-iMagick, который должен ссылаться на системный ImageMagick, который успешно их читает. Я еще не обнаружил проблем с другими форматами, jpg, png, tiff, webp и т. Д. Все читается нормально. Это происходит с RAW форматами.
Любая помощь приветствуется
Оказывается, проблема заключалась в том, что, поскольку я указывал PHP-iMagick на путь tmp загружаемого файла, который не имел расширения файла, PHP-iMagick с трудом обрабатывал формат. Я исправил это, переместив временно загруженный файл в другое место и присвоив ему его исходное имя и расширение, чтобы PHP-iMagick мог правильно определить формат и прочитать изображение, как ожидалось.
Других решений пока нет …