Работа с изображениями в Linux: команда convert (ImageMagick)
Если нужно быстро менять формат, изменять размер, обрезать, поворачивать или пакетно обрабатывать изображения в терминале — используйте ImageMagick. Команда convert (в ImageMagick 7 это magick) позволяет делать это скриптами и в CI; в статье — базовые примеры, советы по безопасности и готовые шаблоны для работы.

Введение
ImageMagick — это набор утилит для обработки растровых изображений через командную строку. Самая распространённая утилита для одноразовых преобразований — convert. В ImageMagick 7 основной бинарник называется magick, и многие примеры совместимы с обоими вызовами; если команда convert отсутствует, используйте magick convert.
Определение: convert — инструмент из ImageMagick для преобразования и редактирования изображений в командной строке.
Важно: при автоматической обработке изображений всегда делайте резервные копии исходников и тестируйте команды на примерах.
Как установить ImageMagick
Проверка установки:
convert --versionЕсли команда не найдена или вы используете ImageMagick 7, попробуйте:
magick --versionУстановка в Debian/Ubuntu:
sudo apt-get -y install imagemagickВ CentOS/RHEL используйте yum/dnf, в macOS — brew install imagemagick.
Примечание: некоторые дистрибутивы включают GraphicsMagick, где утилита называется gm. Команды отличаются.
Получение информации о файле
Быстрая информация об изображении:
convert -print "Type: %m\nSize: %b\nDimensions: %wx%h\n" /dev/null Вывод примерно такой:
Type: jpeg
Size: 35.6KB
Dimensions: 640x480Изменение формата изображения
Чтобы просто сохранить изображение в другом формате, указывать дополнительные опции не нужно. Основной способ:
convert input.png output.jpgВажно: в примерах иногда встречается опция -append — она объединяет изображения, а не конвертирует формат. Для изменения формата используйте просто указание выходного имени с нужным расширением.
Совет: задайте качество JPG при сохранении:
convert input.png -quality 85 output.jpgМасштабирование изображений
Пропорциональное изменение размера в процентах:
convert -resize 25% Прямое указание размеров:
convert -resize 1024x768 profile.jpg profile_large2.jpgПолезные модификаторы:
- 1024x768 — масштабирует, сохраняя пропорции, вписывая в рамку 1024×768.
- 1024x768! — принудительно приведёт к точным размерам (искажение).
- 1024x — ограничение по ширине, высота рассчитывается автоматически.
- 1024x768^ — масштабирует, чтобы заполнить рамку, после чего можно обрезать по центру.
и < — выполняют изменение размера только если изображение больше (>) или меньше (<) заданного.
Примеры использования с обрезкой по центру:
convert input.jpg -resize 1024x768^ -gravity center -extent 1024x768 output.jpgОбрезка изображений
Обрезка с указанием размера и смещения:
convert -crop 640x250+0+0 Параметр +X+Y указывает точку старта отсчёта от левого верхнего угла. Чтобы обрезать нижнюю часть:
convert -crop 640x250+0+230 Совет: для центровки используйте -gravity и -crop вместе:
convert input.jpg -gravity center -crop 640x250+0+0 +repage output.jpgЗамечание: +repage удаляет информацию о старых виртуальных размерах кадра, полезно для предсказуемого результата.
Вращение изображений
Простое вращение по градусам (по часовой стрелке):
convert -rotate 90 Для вращения без добавления фона используйте -background и -rotate или -distort:
convert input.png -background none -rotate 90 output.pngДобавление подписи на изображение
Добавление текста с указанием шрифта, размера и цвета:
convert profile.jpg -pointsize 14 -font helvetica -fill yellow -draw 'text 270,160 "Warm Regards from the Family"' profile_cap.jpgРекомендации:
- Оборачивайте аргумент -draw в одинарные кавычки, а сам текст — в двойные.
- Проверьте, что указанный шрифт доступен в системе (например, /usr/share/fonts).
- Для точного позиционирования используйте -gravity и -annotate:
convert profile.jpg -gravity South -pointsize 18 -fill white -annotate +0+10 "© 2026 Company" profile_cap2.jpgКомбинирование команд в одной строке
Вы можете применять несколько операций последовательно:
convert -rotate 90 -crop 1200x800 -resize 25% Порядок операций важен. В примере сначала поворот, затем обрезка, затем масштабирование.
Пакетная обработка каталогов
Простой пример для .jpg-файлов:
mkdir -p thumbs
for i in *.jpg; do convert "$i" -resize 30% "thumbs/$i"; doneБолее надёжный способ (включая пробелы и подкаталоги):
mkdir -p thumbs
find . -maxdepth 1 -type f -iname '*.jpg' -print0 | while IFS= read -r -d '' f; do
fname=$(basename "$f")
convert "$f" -resize 30% "thumbs/$fname"
doneSOP для пакетной обработки:
- Создайте резервную копию всех исходных файлов.
- Проведите тест на 1–3 файлах и проверьте результат.
- Запустите обработку по очереди, контролируя логи и свободное место на диске.
- После успешной проверки удалите резервные копии или переместите их в архив.
Критерии приёмки
- Все целевые файлы обработаны и сохранены в папке назначения.
- Размеры и формат соответствуют ожиданиям.
- Метаданные обрабатываются в соответствии с политикой (см. раздел о безопасности).
Когда convert даёт неверный результат и альтернативы
Типичные причины проблем:
- Использование старой версии ImageMagick или конфликт с GraphicsMagick.
- Ошибки в синтаксисе команд (например, лишний -append).
- Ограничения памяти при обработке больших изображений.
- Недостаточно прав на файлы/папки.
Альтернативы и обходные пути:
- magick (ImageMagick 7): используйте magick convert … или magick … напрямую.
- gm (GraphicsMagick): совместим с другими синтаксисами и быстрее на некоторых задачах.
- jpegoptim/pngquant/optipng — для оптимизации и сжатия без потери качества.
- библиотечные решения: Pillow (Python), Sharp (Node.js) — если нужна интеграция в приложение.
Совет по миграции: если скрипты были написаны для convert и вы перешли на ImageMagick 7, замените вызовы на magick convert или обновите синтаксис в соответствии с документацией.
Безопасность и приватность
Обработка недоверенных изображений может быть рискованной. В прошлом были случаи уязвимостей при обработке специально сформированных файлов. Рекомендации:
- Не обрабатывайте изображения от ненадёжных источников в привилегированном окружении.
- Ограничьте разрешения и доступ к временным файлам.
- Используйте policy.xml для отключения потенциально опасных декодеров и внешних делегатов.
- По умолчанию убирайте лишние метаданные перед публикацией:
convert input.jpg -strip output.jpg- Для конфиденциальных данных убедитесь, что EXIF и XMP удалены.
Полезная памятка (cheat sheet)
Примеры часто используемых команд:
# Конвертация формата
convert input.png output.jpg
# Качество jpeg
convert input.png -quality 85 output.jpg
# Ресайз 50% по ширине
convert input.jpg -resize 50% output.jpg
# Ресайз с заполнением 800x600
convert input.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg
# Обрезка 640x250 от (0,0)
convert input.jpg -crop 640x250+0+0 +repage output.jpg
# Поворот с прозрачным фоном
convert input.png -background none -rotate 90 output.png
# Добавить подпись внизу по центру
convert input.jpg -gravity South -pointsize 18 -fill white -annotate +0+10 "© Your Name" output.jpg
# Удалить метаданные
convert input.jpg -strip output.jpgПроверочные сценарии и критерии приёмки
Тесты для проверки автоматизации:
- Для набора тестовых изображений после обработки: все файлы должны существовать в папке назначения.
- Проверить размеры (ширина×высота) с ожидаемыми значениями.
- Проверить, что формат совпадает с расширением файла.
- Убедиться, что метаданные отсутствуют при использовании -strip.
Роли и чек-листы
Для разработчика:
- Написать модуль-обёртку над convert/magick.
- Добавить обработку ошибок и логирование.
- Добавить unit-тесты на несколько форматов и размеров.
Для системного администратора:
- Обновить ImageMagick до стабильной версии.
- Настроить policy.xml для безопасности.
- Контролировать использование памяти и очередь задач.
Для дизайнера/контент-менеджера:
- Подготовить справочник размеров и качеств для сайта.
- Тестировать визуально выборку файлов.
- Проверять соответствие брендбуку (цвет, шрифты).
Примеры продвинутых приёмов
- Создание sprite-изображения из набора картинок:
convert image1.png image2.png image3.png +append sprite.png- Генерация веб-версии с прогрессивным JPEG и удалением метаданных:
convert input.tif -strip -interlace JPEG -quality 75 output.jpg- Массовая оптимизация PNG через pngquant (комбинированно):
convert input.png png:- | pngquant --quality=70-90 - > output.pngЧастые ошибки и их исправления
- Проблема: команда convert не найдена. Решение: попробуйте magick или установите ImageMagick.
- Проблема: изображение слишком большое и команда падает с ошибкой памяти. Решение: использовать ulimit, временные файлы на больший диск, или обрабатывать по частям.
- Проблема: потеря прозрачности при конвертации в PNG. Решение: укажите -background none и сохраняйте в формат с альфой.
Итог и рекомендации
ImageMagick — мощный инструмент для автоматической и пакетной обработки изображений в Linux. Он полезен в сценариях CI/CD, при подготовке медиа для веба и в админских задачах. Для безопасной работы:
- Тестируйте команды на копиях файлов.
- Настройте политику безопасности в ImageMagick.
- Рассмотрите специальные инструменты для оптимизации (jpegoptim, pngquant) при необходимости экономии трафика.
Ресурсы: используйте встроенную справку:
convert -help
magick -helpРезюме
Вы узнали, как устанавливать ImageMagick, получать информацию о файле, менять форматы, масштабировать, обрезать, вращать, добавлять подписи и пакетно обрабатывать каталоги. Также получили советы по безопасности, альтернативы и готовые шаблоны.
Важно
Всегда делайте резервные копии перед массовой обработкой и проверяйте результаты на примерах.
Похожие материалы
Как разделить меш в Blender
Как увеличить изображение без потери качества
Как создать влог на iPhone — полное руководство
Как отразить экран на телевизор — все способы
Бесконечная прокрутка в Vue 3 — useInfiniteScroll