Утилиты 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
Связанные статьи:
- Структура команды magick (ImageMagick) (100%)
- Руководство по ImageMagick: установка, использование и решение проблем (98.4%)
- Конвертация изображений в любые форматы в Linux (98.4%)
- Модификация изображений в командной строке Linux (98.4%)
- Как наложить одно изображение на другое в командной строке Linux (компоновка изображений) (98.4%)
- Аутентификация по паролю и unix_socket в MySQL и MariaDB. Исправление ошибки #1698 - Access denied for user ‘root’@’localhost’ (RANDOM - 1.6%)