Как использовать ImageMagick для пакетной обработки изображений

ImageMagick — набор бесплатных инструментов для работы с растровыми изображениями из командной строки. Он умеет менять размер, конвертировать форматы, менять качество, удалять метаданные, добавлять прозрачность и создавать миниатюры. Утилиты magick и identify работают в Linux, macOS и Windows, что позволяет встроить обработку графики в обычный скрипт.

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

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

ImageMagick выпускается в разных версиях, поэтому важно учитывать различия в синтаксисе. В актуальной версии используется команда magick, тогда как в ImageMagick 6 основная операция выполнялась через convert. Перед изменениями следует создать резервную копию и записывать результаты в отдельную папку.

Установка ImageMagick и проверка среды

В Debian и Ubuntu пакет устанавливается командой sudo apt install imagemagick. Пользователи macOS могут выполнить brew install imagemagick, а в Windows — установить imagemagick через Chocolatey. Альтернативой служит официальная сборка: после распаковки нужно добавить каталог с исполняемыми файлами в системную переменную PATH.

Проверка начинается с запроса версии: magick -version. Команда выводит сведения о сборке, поддерживаемых платформах и подключённых библиотеках. Если доступна только convert -version, скорее всего, установлен ImageMagick 6. В такой среде команды из актуальных примеров обычно работают после замены magick на convert.

Форматы можно просмотреть командой magick -list format. В выводе WebP, JPEG, PNG и AVIF должны иметь отметку о поддержке. Если программа не запускается, проверьте переменную PATH, права на каталог и наличие зависимых библиотек. Дополнительные подсказки по настройке собраны в справке Ayuda G+.

Базовые операции с изображениями

Одиночное преобразование выполняется простой конструкцией: magick photo.jpg -auto-orient -resize "1200x800>" -strip -quality 82 photo.webp. Здесь photo.jpg является исходником, -auto-orient выравнивает изображение согласно EXIF, -resize задаёт размер, -strip удаляет метаданные, а -quality регулирует качество WebP.

Размер в -resize можно указывать несколькими способами. Значение 1200x800> сохраняет пропорции и уменьшает слишком большие изображения, не увеличивая маленькие. Если требуется точное кадрирование, применяется конструкция -resize "1200x800^" -gravity center -extent 1200x800. Принудительное искажение пропорций задаётся восклицательным знаком, но для фотографий его лучше избегать.

Прозрачность обычно сохраняется в PNG и WebP. Перед созданием JPEG с непрозрачным фоном добавьте -background white -alpha remove. Метаданные GPS, модель камеры и дата съёмки могут содержать личные сведения, поэтому для публичных файлов полезно удалять их командой -strip. При этом цветовые профили также удаляются, поэтому их следует проверять до массовой обработки.

Способ запуска Когда подходит Преимущество Ограничение
Один файл через magick Разовое преобразование Простая команда и понятный результат Не обрабатывает каталог
Маска *.jpg Небольшая группа файлов Короткая запись без цикла Возможны конфликты имён и ошибки отображения
Цикл for Один уровень вложенности Контроль каждого файла и безопасные имена Не охватывает подкаталоги
Рекурсивный find Дерево каталогов Обработка вложенных папок и файлов с пробелами Требует аккуратной сборки путей

Пакетное преобразование каталога

Сначала создайте отдельный каталог для результатов и не изменяйте оригиналы. Например, исходники могут находиться в папке source, а оптимизированные WebP — в папке web. Такое разделение упрощает повторный запуск, сравнение качества и восстановление при неудачных настройках.

В Bash обработка файлов одного каталога выглядит следующим образом:

mkdir -p web
for file in source/*.jpg; do
  [ -e "$file" ] || continue
  name="$(basename "${file%.*}")"
  magick "$file" -auto-orient -resize "1600x1600>" \
    -strip -quality 82 "web/${name}.webp"
done

Кавычки сохраняют имена с пробелами и специальными символами. Проверка [ -e "$file" ] пропускает литеральную маску, если подходящих файлов нет. Расширения можно расширить до *.jpeg, *.png или другим списком, но для каждого формата разумно подбирать качество отдельно.

В PowerShell для Windows применяется аналогичный конвейер:

New-Item -ItemType Directory -Force web | Out-Null
Get-ChildItem .\source\*.jpg | ForEach-Object {
  $target = Join-Path .\web ($_.BaseName + ".webp")
  magick $_.FullName -auto-orient -resize "1600x1600>" -strip -quality 82 $target
}

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

Рекурсивный обход и запуск по расписанию

Для обработки вложенных папок используйте find. Он передаёт пути в безопасном формате и находит файлы независимо от регистра расширения:

find source -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |
while IFS= read -r -d "" file; do
  relative="${file#source/}"
  target="web/${relative%.*}.webp"
  mkdir -p "$(dirname "$target")"
  magick "$file" -auto-orient -resize "1600x1600>" -strip -quality 82 "$target"
done

Готовый цикл сохраняют в файле с расширением .sh и запускают одной командой. Это удобнее повторного копирования длинной строки в терминал. В、Windows эквивалентом служит файл .ps1, а для регулярного запуска можно использовать Планировщик заданий.

Большие каталоги обрабатываются быстрее при параллельном запуске нескольких процессов через xargs или средства PowerShell. Сначала измерьте расход памяти и нагрузку на диск, поскольку ImageMagick может одновременно декодировать крупные изображения. Для организации файлов и расширения автоматизации полезны советы для компьютера.

Практические сценарии обработки

Для сайта фотографии обычно уменьшают до максимальных размеров, удаляют служебные метаданные и сохраняют в WebP. Если аудитория использует старые браузеры, alongside WebP стоит создавать JPEG-версии. Исходное разрешение лучше сохранять в отдельной папке, чтобы в будущем можно было подготовить другой размер без повторной загрузки.

Квадратные миниатюры для каталога или аватаров создаются командами:

magick photo.jpg -auto-orient -resize "400x400^" \
  -gravity center -extent 400x400 thumbnail.jpg

Флаг ^ заполняет выбранную область, а -extent обрезает лишние части по центру. Для сохранения всего кадра вместо кадрирования используйте -resize "400x400>" с белым или прозрачным фоном.

Контактный лист помогает быстро найти повреждённые, пустые и неверно ориентированные изображения:

magick montage source/*.jpg -thumbnail 320x220 \
  -tile 3x -geometry +8+8 contact-sheet.jpg

Размеры готовых файлов можно проверить командой magick identify -format "%f %wx%h\n" web/*.jpg. Сравнивая исходник и результат на нескольких сложных снимках, вы заметите пересветы, потерю резкости или неправильную ориентацию до запуска всего набора.

Безопасный запуск и регулярное применение

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

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

Иконка пользователя в серых тонах

Настройка Windows

Доступ к скрытым параметрам конфигурации, отключение телеметрии, работа с диспетчером задач и тонкая настройка меню «Пуск» в стиле Windows XP для Windows 7.

Иконка браузера в серо-синих тонах

Веб-браузеры

Скрытые страницы конфигурации в Firefox, Chrome и Opera, быстрый текстовый редактор прямо в браузере, эффект Lightbox JS для изображений и настройка внешнего вида Firefox.

Иконка папки в нейтральных серых тонах

WordPress и блоги

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

Изометрический 3D-рендер: светлый веб-сайт с серо-голубым заголовком, парящий над чистой белой поверхностью Изометрический 3D-рендер: тёмно-серая иконка социального букмаркинга на светлом фоне

Обратная связь

Есть вопрос или предложение по темам блога? Напишите — автор на связи.