ImageMagick: делегат декодирования для этого формата изображения `` @error/составляют .c/ReadImage/504

Проблема: ImageMagick конвертировать не может обрезать изображение. Похоже, он не распознает тип изображения?

Что я пробовал:

Я искал в Интернете, и я видел несколько подобных проблем, но не моя. Я пытался их решения, включая

  • Удаление и переустановка ImageMagick через Brew.
  • определить формат -list (JPEG, GIF, PNG, TIFF и т.д. были все там, и у всех были права rw)
  • конвертировать -version (png является одним из встроенных делегатов)
  • convert pic1.png pic1-jpg.jpg (это работало нормально)
  • convert pic1-jpg.jpg pic1-jpg.jpg (это работало нормально)
  • convert pic1-jpg.jpg 805X972 + 34 + 94 pic1-jpg-crop.jpg (это привело к той же ошибке, что и для png, как показано ниже)

Я работаю на Mac OSX El Capitan и все остальное в терминале работает нормально. ImageMagick уже был установлен.

Когда я бегу:

$ convert /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487.png 805X972+34+94 /Users/Innovate/Desktop/crop/2015-04-26-GinaDate13_487-cropped.png 

Я получил:

конвертировать: невозможно открыть изображение '805X972 + 34 + 94': нет такого файла или каталога @error/blob.c/OpenBlob/2702.

convert: нет делегата декодирования для этого формата изображения '' @error/constitute.c/ReadImage/504.

нет делегата декодирования для этого формата изображения '' @error/constitute.c/ReadImage/504

В других постах по этому вопросу люди получают

преобразовать делегата без декодирования для этого формата изображения 'PNG'

Или аналогичные (за исключением их типа изображения или имени файла и типа изображения)

Тем не менее, мой ничего не говорит о типе файла изображения...

Я не пытался удалить ImageMagick, а затем установить его вручную из источников, потому что я не очень уверен в этом... (было показано это решение: qaru.site/info/1250339/...)

Кто-нибудь знает, что может происходить?

Кроме того, кто-нибудь может помочь мне интерпретировать часть @error/constitute.c/ReadImage/504? Я смотрю на код для construct.c, но я не уверен, смогу ли я получить от него полезную информацию для решения моей проблемы (я немного знаю C)

Спасибо!

Ответ 1

brew remove imagemagick //to delete current version
brew install imagemagick --build-from-source

исправил это для меня на Mac

Ответ 2

Хорошо, играя вокруг, я выяснил решение, и я отправляю его здесь для других людей, которые могут столкнуться с этой проблемой:

По-видимому, это не /no больше/не для меня способ обрезать изображение с помощью ImageMagick convert. Несмотря на то, что это использование показано здесь, это не сработало для меня, используя El Capitan (возможно, это ОС?).

Вместо использования

конвертировать img.png 805X972 + 34 + 94 img-crop.png

Правильная команда, которая работает:

convert image.png -crop 805X972 + 34 + 94 image-crop.png

 

То есть команда:

convert image.ext -crop heightXwidth + positionX + positionY * imagecropped.ext

 

 

Подробнее можно найти здесь. Из описания на этой странице ImageMagick меня смутило пример, когда они конвертировали rose: -crop, но вы можете просто использовать его так, как я упоминал выше, и он отлично работает.

Ответ 3

Бросание в мои два цента, поскольку я тоже боролся с этой проблемой в течение последних нескольких дней. У меня не было проблем с выполнением команд ImageMagick на моей локальной машине, но получено сообщение об ошибке, как упоминалось в OP, когда я запускал команду с сервера Tomcat, работающего на Azure Cloud.

Я мог бы определить причину, выполнив следующую команду:

convert -list format

На моей локальной машине он вернет довольно длинный список всех поддерживаемых форматов, тогда как на Kudu (инструмент CLI Azure) он вернет пустой результат. Это означает, что ImageMagick не нашел путь к своим DLL файлам, необходимым для обработки.

В моем случае проблема была просто вызвана отсутствием конфигурации на Azure:

  • Отсутствие корневой папки ImageMagick в переменной системной среды% PATH%
  • Отсутствие переменной среды "MAGICK_HOME" (устанавливается в корневую папку вашего установочного каталога ImageMagick)
  • Отсутствие переменной окружения "MAGICK_CODER_MODULE_PATH" (устанавливается в указанную выше папку +/modules/coders)

ПРИМЕЧАНИЕ. Для людей, которые также испытывают эту проблему на Azure, вы можете посмотреть этот ответ SO, в котором объясняется, как добавить переменную среды с помощью XDT Transform.

Ответ 4

Я получал ту же ошибку за отсутствие некоторых одинарных кавычек.

При объединении изображений с convert -draw с кавычками предоставленное изображение должно быть заключено в кавычки.

Дефрагментатор декодирования для этого формата изображения `` @error/составляют .c/ReadImage/504

convert myBackground.png -font Arial -pointsize 20 \
  -draw "gravity west image Over 50,80,20,20 'myForeground.png'" \
  # -----------------------------------------^ added missing single quotes
  -flatten ./finalImage.jpg                  

Когда я добавил в одинарные кавычки вокруг myForeground, проблема исчезла. Какая паршивая ошибка!

Ответ 5

Альтернативная команда Imagemagick:

convert pic1-jpg.jpg[805x972+34+94] pic1-jpg-crop.jpg

или как указано ранее

convert pic1-jpg.jpg -crop 805x972+34+94 +repage pic1-jpg-crop.jpg

см. Inline Image Crop в https://www.imagemagick.org/script/command-line-processing.php

Как правило, я предпочитаю использовать x (нижний регистр), а не X (верхний регистр) между шириной и высотой, для удобства чтения. Но либо работает.

Ответ 6

Мне также пришлось бороться с этой проблемой сегодня в операции преобразования, которая применяла другой профиль цветового пространства.

Кажется, команда imagick convert чувствительна к расширению имени файла профиля. В моем случае это был временный файл без суффикса, который вызывал то же сообщение об ошибке из заголовка вопроса.

convert infile.jpg -profile /tmp/profile-without-suffix outfile.jpg

Добавление правильного суффикса к имени файла профиля устраняет проблему:

(при условии формата ICC)

convert infile.jpg -profile /tmp/profile-without-suffix.icc outfile.jpg

Ответ 7

Для меня (на Macos Mojave, используя Imagick с CraftCMS) мне пришлось переустановить Imagick с помощью pecl uninstall imagick и pecl install imagick (а затем перезапустить Apache с помощью sudo apachectl -k restart). Я, должно быть, запустил brew upgrade и получил более новую версию ImageMagick, в результате которой Imagick NoDecodeDelegateForThisImageFormat 'JPEG' @error/constitute.c/ReadImage/556 похожую ошибку NoDecodeDelegateForThisImageFormat 'JPEG' @error/constitute.c/ReadImage/556.