Автоматизация ImageMagick через conjure и MSL в Ubuntu

Введение в обработку изображений через conjure

Утилита conjure, входящая в экосистему ImageMagick, представляет собой интерпретатор специализированного XML-языка MSL (Magick Scripting Language). С её помощью системные администраторы и инженеры могут описывать многоэтапные графические конвейеры в декларативном стиле и запускать пакетную обработку без нагромождения длинных аргументов в командной строке. В данном руководстве мы развернем рабочее окружение в Ubuntu, подготовим базовые и составные сценарии MSL, а также настроим динамическую передачу параметров для гибкой автоматизации.

Развертывание пакета ImageMagick и подготовка conjure

Для работы с инструментом первым делом синхронизируем локальные индексы репозиториев и инсталлируем дистрибутив imagemagick.

Обновление репозиториев и установка пакета ImageMagick

Убедимся, что исполняемый файл conjure доступен в стандартных системных каталогах переменной окружения PATH:

Проверка наличия бинарника conjure в PATH

Утилита conjure берет на себя разбор файлов спецификации MSL, транслируя XML-теги в низкоуровневые операции графического движка ImageMagick. Для проверки текущей сборки и доступных модулей запросим информацию о версии с помощью флага -version.

⚙️ [Ключевые параметры запуска]

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

Сведения о версии и конфигурации conjure

Создание первого MSL-скрипта: трансформация масштаба

Организуем изолированное рабочее пространство для экспериментов и перейдем в свежесозданный каталог:

Создание рабочего каталога и переход в него

Сгенерируем исходный графический файл размером 400x400 пикселей со сплошной заливкой, на котором будем отрабатывать сценарии:

Генерация тестового изображения через convert

Сформируем файл сценария resize.msl. В разметке XML последовательно описываются загрузка исходника, изменение разрешения до 200x200 пикселей и запись модифицированного файла:

Создание базового сценария изменения размера resize.msl

Передадим готовый скрипт интерпретатору conjure для выполнения описанных трансформаций:

Запуск выполнения инструкций файла resize.msl

Сравним метаданные исходного и полученного файлов с помощью команды identify, удостоверившись в корректной смене геометрии:

Сравнение геометрических параметров изображений через identify

Построение конвейера: поворот и художественные фильтры

Скрипты MSL позволяют без труда выстраивать цепочки графических модификаций. Сконструируем сценарий effects.msl, который поворачивает уменьшенное изображение на 45 градусов и накладывает стилизацию под рисунок углем (charcoal):

Подготовка составного сценария effects.msl

Запустим обработку цепочки фильтров, передав XML-сценарий утилите conjure:

Применение комплекса фильтров через conjure effects.msl

Проинспектируем структуру и формат получившегося файла с помощью системной утилиты file:

Инспекция формата и типа полученного файла

Параметризация сценариев через флаг -define

Для интеграции в CI/CD и скрипты автоматизации статичные значения непригодны. Сделаем шаблон универсальным: подготовим dynamic.msl, где требуемые габариты считываются из переменной %[target_size]:

Создание динамического шаблона с переменными dynamic.msl

Передадим конкретный размер 120x120 на лету, воспользовавшись опцией -define:

Инъекция параметров через ключ -define при вызове conjure

Удостоверимся, что интерполяция аргумента сработала штатно и геометрия итогового файла соответствует переданному параметру:

Проверка параметров динамически созданного изображения

Мы изучили базовые и продвинутые приемы эксплуатации conjure в дистрибутиве Ubuntu с применением языка MSL.
Внедрение подобных XML-шаблонов избавляет от необходимости писать громоздкие shell-обертки и позволяет элегантно масштабировать конвейеры пакетной подготовки медиаресурсов.