zaLinux.ru

Ошибки при использовании magick (convert) из пакета ImageMagick и их устранение


Утилиты magick (convert) из пакета ImageMagick используются для конвертации и модификации изображений. Команды magick (convert) имеют большое количество опций, хотя в своём базовом применении, например, для конвертации из одного формата в другой, можно обойтись вовсе без опций.

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

Подробности по установке ImageMagick, в том числе какие зависимости необходимо установить для поддержки максимального количества форматов, смотрите в статье: Руководство по ImageMagick: установка, использование и решение проблем

Как исправить «magick: команда не найдена»

Если вы столкнулись с ошибкой, что команда magick не найдена, то это означает, что:

  • не установлен пакет imagemagick
  • установлен пакет imagemagick шестой или более ранней версии

На момент написания актуальной версией ImageMagick является 7.*. Но в Debian и во всех производных дистрибутивах используется ImageMagick 6.*, в которой программа magick отсутствует. Поэтому если у вас возникла ошибка, что команда magick не найдена, используйте вместо неё команду convert.

magick: no images found for operation… (РЕШЕНО)

Следующая команда:

magick -motion-blur 10 IMAGE.jpg OUTPUT.jpg

вызовет ошибку:

magick: no images found for operation `-motion-blur' at CLI arg 1 @ error/operation.c/CLIOption/5414.

Суть ошибки в том, что для указанного оператора не найдены изображения. При этом как вы можете убедиться, в команде указано входное изображение для преобразования (IMAGE.jpg) и указано имя выходного изображения (test.jpg).

Чтобы понять причину ошибки, обратимся к синтаксису команды magick:

magick [ВХОДНЫЕ-ОПЦИИ] ВХОДНОЙ ФАЙЛ [ВЫХОДНЫЕ-ОПЦИИ] ВЫХОДНОЙ ФАЙЛ

То есть утилита magick различает «опции входного файла» и «опции выходного файла». Причём практически все опции являются ВЫХОДНЫМИ-ОПЦИЯМИ. Исключением, то есть ВХОДНЫМИ-ОПЦИЯМИ, являются -antialias, -caption, -density, -define, -encoding, -font, -pointsize, -size и -texture, а также опции из раздела «Разные параметры».

То есть для исправления данной ошибки достаточно передвинуть опцию, разместив её между именами входного и выходного файлов. Следующая команда не вызовет ошибку:

magick IMAGE.jpg -motion-blur 10 OUTPUT.jpg

magick: missing output filename `-identify' … (РЕШЕНО)

Следующая команда по задумке должна вывести подробную информацию о файле IMAGE.jpg:

magick IMAGE.jpg -identify -verbose

Но вместо этого она выводит ошибку:

magick: missing output filename `-identify' at CLI arg 3 @ error/magick-cli.c/ProcessCommandOptions/524.

Суть ошибки в том, что отсутствует имя выходного файла. Не смотря на то, что опции -identify и -verbose не подразумевают какой-либо обработки файла, для исправления указанной ошибки нужно указать выходной файл:

magick IMAGE.jpg -identify -verbose ANY.jpg

magick: MissingArgument … (РЕШЕНО)

В следующая команда, несмотря на правильное размещение опции между именами файлов, вызывает ошибку:


magick IMAGE.jpg -posterize OUTPUT.jpg

Текст ошибки:

magick: MissingArgument `-posterize' at CLI arg 2 @ fatal/magick-cli.c/ProcessCommandOptions/447.


Причина ошибки в том, что для используемой опции отсутствует аргумент. Чтобы узнать, какой именно аргумент ожидает опция, обратитесь к справке. В данном случае ожидается число цветовых уровней. Следующая команда будет выполнена без ошибок:

magick IMAGE.jpg -posterize 2 OUTPUT.jpg

magick: unrecognized option `-channel-extract'… (РЕШЕНО)

В следующей команде опция помещена между именами файлов, у опции присутствует аргумент:

magick IMAGE.jpg -channel-extract 10 OUTPUT.jpg

Но, тем не менее, выполнение команды завершается ошибкой:

magick: unrecognized option `-channel-extract' at CLI arg 2 @ fatal/magick-cli.c/ProcessCommandOptions/428.

Суть ошибки в том, что опция не распознана. Если опция не распознана, то для начала проверьте правильность её написания. Если опция написана правильно, но при этом не распознана, значит эта опция устарела и была исключена. По моим наблюдениям, справка, выводимая командой

man magick

хотя и является в целом актуальной, но содержит несколько устаревших опций.

Официальная онлайн справка по опциям magick находится на следующей странице: https://imagemagick.org/script/magick.php

magick: unable to read font `Candice' @ warning/annotate.c/RenderType/1005. (РЕШЕНО)

При выполнении команды с использованием опции -font, например:

magick -background lightblue -fill blue -font Candice -pointsize 72 label:Anthony label.gif

может возникнуть ошибка:

magick: unable to read font `Candice' @ warning/annotate.c/RenderType/1005.

Причина ошибки в том, что вы пытаетесь использовать шрифт, который отсутствует в вашей системе. Если вы указали путь до файла со шрифтами, значит данный файл не найден.


Чтобы узнать, какие шрифты присутствуют в вашей системе, используйте следующую опцию:

magick -list font

Почему все файлы сохраняются в один файл (РЕШЕНО)

При выполнении программы обрабатывающей несколько файлов, вы можете столкнуться с ситуацией, когда все полученные изображения будут сохранены в один единственный файл.

Форматы JPEG и PNG не поддерживает файлы с несколькими изображениями, поэтому рассмотренная проблема не возникает при конвертировании в эти форматы. Но ряд форматов, например, GIF, MIFF, TIFF, PDF, MNG, HEIF и HEIC, поддерживают файлы с несколькими изображениями. В этом случае все изображения по умолчанию будут сохранены в один файл.

Смотрите также: Что такое формат изображения HEIF (или HEIC)?

Например, следующая команда подразумевает конвертацию всех изображений JPEG в текущей папке в формат HEIF:

magick '*.jpg[1000x>]' -set filename:currentfile '%t-%wx%h' 'heif/%[filename:currentfile].heif'

Чтобы сохранять каждое изображение в отдельный файл, добавьте к вашей команде опцию +adjoin, например:

magick '*.jpg[1000x>]' -set filename:currentfile '%t-%wx%h' +adjoin 'heif/%[filename:currentfile].heif'

Опция не работает, но ошибки не показываются

Рассмотрим следующую команду:

magick IMAGE.jpg -rotate 30 -background red test8.jpg

По задумке, изображение должно быть повёрнуто на 30 градусов, а появившиеся пустые углы должны быть залиты красным цветом. В результате выполнения команды изображение действительно будет повёрнуто, но углы останутся белыми.

Чтобы исправить ошибку, необходимо указать опцию -background первой. Следующая команда сработает именно так, как задумано:

magick IMAGE.jpg -background red -rotate 30 test8.jpg

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован.