Как использовать convert (ImageMagick) в Linux

Что такое convert и почему это удобно
convert — это инструмент из набора ImageMagick, позволяющий выполнять сотни операций над изображениями из командной строки. Коротко: вы можете быстро автоматизировать повседневные задачи (конвертация форматов, уменьшение, кадрирование, подписи), встроить обработку в скрипты и серверные пайплайны.
Определение: ImageMagick — пакет утилит для создания, редактирования и конвертации растровых изображений.
Важно: операции часто изменяют порядок обработки: масштабирование, кадрирование и поворот дают разные результаты в зависимости от последовательности команд.
Установка ImageMagick
Проверьте установку:
convert --versionЕсли утилита не найдена, установите ImageMagick (Ubuntu/Debian):
sudo apt-get -y install imagemagickАльтернатива (Red Hat/CentOS):
sudo yum install imagemagickПримечание: на некоторых дистрибутивах или в контейнерах пакет может называться imagemagick-6 или imagemagick-7. Для массовых преобразований также полезна утилита mogrify (входит в тот же пакет) — она перезаписывает файлы на месте.
Получение информации об изображении
Команда для вывода типа, размера и размеров изображения:
convert -print "Type: %m\nSize: %b\nDimensions: %wx%h\n" /dev/null Пример результата:
Type: JPEG
Size: 35.6KB
Dimensions: 640x480Это удобно для скриптов — можно парсить вывод и принимать решения (например, создавать превью, если одна сторона больше порога).
Изменение формата файла
Чтобы изменить формат, достаточно указать новое имя с нужным расширением:
convert Примеры:
convert photo.png photo.jpg
convert image.tiff image.pngЗамечание: опция -append не нужна для простой конвертации — она склеивает изображения по вертикали. Используйте -append только если нужно объединить несколько изображений.
Масштабирование (resize)
Масштабирование в процентах:
convert -resize 25% Это создаст изображение с размерами 25% от исходных. Если нужен точный размер в пикселях:
convert -resize 1024x768 profile.jpg profile_large2.jpgПоведение:
- Указание одного значения (например, 1024x) сохраняет пропорции.
- Если оба значения заданы, изображение подгоняется под рамки 1024x768 (может измениться соотношение сторон, если не использовать флаги для сохранения пропорций).
Совет: для уменьшения веса используйте в связке -strip и -quality:
convert input.jpg -resize 1024x -strip -quality 85 output.jpg-strip удаляет все метаданные (EXIF), -quality управляет степенью сжатия JPEG.
Кадрирование (crop)
Синтаксис:
convert -crop 640x250+0+0 Пояснения: 640x250 — ширина и высота результирующего фрагмента; +0+0 — смещение от левого верхнего угла.
Пример, чтобы сохранить нижнюю часть исхода 640x480:
convert -crop 640x250+0+230 Флаги и опции:
- +repage сбрасывает внутренние координаты изображения после кадрирования, если это нужно.
Поворот изображения
Простейший поворот (по часовой стрелке):
convert -rotate 90 rotate принимает отрицательные значения для поворота против часовой стрелки, а также любые градусы для произвольного угла. Для поворота с заполнением фона используйте -background и -flatten.
Добавление подписи (caption/текст)
Пример вставки текста на изображение:
convert profile.jpg -pointsize 14 -font Helvetica -fill yellow -draw "text 270,160 'Warm Regards from the Family'" profile_cap.jpgВажно: в большинстве оболочек удобно использовать двойные кавычки для внешней строки, а внутри текста — одинарные кавычки. В некоторых окружениях придётся экранировать кавычки.
Альтернатива с более гибким позиционированием и выравниванием — использование -annotate или создание отдельного холста с caption и объединение с оригиналом.
Пример с -annotate:
convert profile.jpg -gravity South -pointsize 18 -stroke black -strokewidth 2 -annotate +0+10 "© My Company" -fill white -annotate +0+10 "© My Company" profile_signed.jpgЭтот приём наносит текст с тенью (обводкой) и помещает подпись снизу по центру.
Смешивание команд — порядок важен
Команды можно комбинировать в одной строке. Порядок операций влияет на результат. Пример: поворот, кадрирование и уменьшение до миниатюры:
convert -rotate 90 -crop 1200x800+0+0 -resize 25% Пояснение: сначала меняется ориентация, затем кадрирование по уже повернутому изображению, затем уменьшение.
Пакетная обработка папки
Простой цикл для JPEG (без пробелов в именах файлов):
mkdir -p thumbs
for i in *.jpg; do convert "$i" -resize 30% "thumbs/$i"; doneБолее безопасный вариант (учитывает пробелы в именах) с find:
mkdir -p thumbs
find . -maxdepth 1 -type f -iname '*.jpg' -print0 | while IFS= read -r -d '' file; do
fname=$(basename "$file")
convert "$file" -resize 30% "thumbs/$fname"
doneДля массовых операций есть mogrify — он перезаписывает файлы или может записывать в другую директорию:
mogrify -path thumbs -resize 30% *.jpgmogrify быстрее и удобнее для простых массовых изменений.
Скрипт для безопасной пакетной генерации миниатюр (пример)
#!/bin/bash
set -euo pipefail
SRC_DIR="images"
DST_DIR="thumbnails"
mkdir -p "$DST_DIR"
for src in "$SRC_DIR"/*.{jpg,jpeg,png,gif}; do
[ -e "$src" ] || continue
base=$(basename "$src")
convert "$src" -resize 300x300\> -strip -quality 85 "$DST_DIR/$base"
doneЭтот скрипт: безопасно обрабатывает отсутствующие файлы, создаёт каталог, уменьшает до 300×300, но только если изображение больше (флаг >), удаляет метаданные и снижает качество до 85%.
Типичные ошибки и как их исправить
- “convert: not authorized” — может быть политика безопасности ImageMagick (policy.xml) запрещает работу с некоторыми форматами (PDF, EPS). Решение: отредактировать /etc/ImageMagick-6/policy.xml (или соответствующий путь) и осознанно разрешить операции.
- Файлы с пробелами/специальными символами — используйте кавычки и find -print0.
- Падение памяти при обработке больших файлов — задавайте лимиты: -limit memory 1GB -limit map 2GB.
Производительность и оптимизация
- Удаляйте метаданные: -strip.
- Уменьшайте качество JPEG для веба: -quality 75–85.
- Управляйте ограничениями: -limit memory, -limit map, -limit thread.
- Параллелите задачи: GNU Parallel или xargs -P.
Пример параллельной обработки:
find . -iname '*.jpg' -print0 | parallel -0 convert {} -resize 30% thumbs/{/}Когда convert не подходит (контрпримеры)
- Нужно потоковое преобразование видео — используйте ffmpeg.
- Очень большие наборы изображений и требование к скорости на уровне CDN — лучше специализированные сервисы или библиотеки на C/C++.
- Тонкая работа с векторной графикой (SVG сложной логики) — чаще удобнее рендерить через rsvg-convert или интеграцию с браузером.
Альтернативы и дополняющие инструменты
- mogrify — для массового перезаписывания изображений.
- GraphicsMagick (gm) — форк, иногда быстрее и с меньшими требованиями к памяти.
- ffmpeg — для конвертации анимаций, APNG, WebP, видео-кадр → изображение.
Руководство: быстрый рабочий процесс (mini-methodology)
- Проверка и инвентаризация: получить размеры и формат (convert -print).
- Решение: масштабировать/кадрировать/подписать в зависимости от целей (превью, архив, веб).
- Пакетная обработка: использовать mogrify или скрипты с find/parallel.
- Финализация: оптимизация качества, удаление метаданных, проверка контрольных сумм.
Ролевые чек-листы
Разработчик:
- Автоматизировать обработку в CI.
- Параметризовать размеры в переменных окружения.
- Логировать результаты и ошибки.
Системный администратор:
- Настроить лимиты (-limit).
- Проверить безопасность policy.xml.
- Планировать cron/рабочие очереди для пакетной обработки.
Фотограф/контент-менеджер:
- Хранить оригиналы отдельно.
- Использовать -strip для веба.
- Поддерживать шаблоны подписей/водяных знаков.
QA/тестировщик:
- Проверить соответствие размеров/соотношений сторон.
- Проверить читаемость текста на разных фонах для подписей.
Критерии приёмки
- Превью не превышает заданных пикселей и сохраняет читаемость.
- Подпись отображается корректно на всех целевых изображениях.
- Пакетная обработка завершается без ошибок и все файлы находятся в целевой папке.
Небольшой глоссарий (1 строка)
- ImageMagick — набор утилит для работы с растровой графикой.
- convert — универсальная утилита для конвертации и трансформации изображений.
- mogrify — утилита для массового изменения существующих файлов.
Диаграмма принятия решения (Mermaid)
flowchart TD
A{Нужно обработать один файл или много?} -->|Один| B[Использовать convert]
A -->|Много| C{Изменять на месте?}
C -->|Да| D[mogrify]
C -->|Нет| E[convert в цикл или parallel]
B --> F{Требуется видео/анимация?}
F -->|Да| G[ffmpeg]
F -->|Нет| H[convert / mogrify]Заключение
convert — мощный инструмент для быстрой и воспроизводимой обработки изображений в Linux. Он отлично подходит для автоматизации, пакетной обработки и интеграции в серверные пайплайны. Если вам нужна скорость или специфичная обработка (видео, высокая нагрузка), рассмотрите дополняющие инструменты (mogrify, GraphicsMagick, ffmpeg).
Важно: тестируйте последовательность операций на нескольких образцах, следите за лимитами памяти и безопасностью policy.xml при работе с неподдерживаемыми форматами.
Полезные команды на память:
convert --version
convert input.png output.jpg
convert input.jpg -resize 50% output.jpg
convert input.jpg -crop 200x200+10+10 crop.jpg
mogrify -path thumbs -resize 200x *.jpgПопробуйте convert -help или man convert для полного списка опций и примеров.
Похожие материалы
Зарядная станция на тумбочке — просто и недорого
Скриншот в Windows 11 — все способы быстро
Трансляция звука с ПК на Sonos
Instagram: извлечение данных с Python
Изменить звуковой сигнал запуска в Windows 11