"Журнал «Компьютерра» N 33 от 12 сентября 2006 года" - читать интересную книгу автора (Компьютерра Журнал)

СОФТЕРРА: Высокохудожественный командный интерпретатор


Автор: Илья Шпаньков

Когда разговор заходит о растровых графических редакторах, абсолютное большинство людей в первую очередь вспоминает Adobe Photoshop. Сторонники свободного софта, конечно, не забудут упомянуть и своего фаворита The Gimp, по умолчанию входящего в большинство GNU/Linux-дистрибутивов. Возможно, кто-то вспомнит Paint.NET или еще какой-нибудь «легкий» редактор «для дома, для семьи». Но сегодня мы поговорим не о них.

Все эти популярные средства создания и редактирования графических изображений обладают хорошо развитым интерфейсом и содержат сотни функций, позволяющих создавать настоящие шедевры цифровой живописи. Меж тем наряду со своими известными «коллегами» живет и здравствует еще один своеобразный редактор по имени ImageMagick, который скромно трудится на ниве обработки цифровой растровой графики уже не первый год. Широкой публике этот редактор (а точнее - пакет графических утилит) практически неизвестен в силу особенностей, о которых будет сказано ниже. Однако в некоторых случаях он даст фору любому именитому аналогу.


Скромный трудяга

Прежде всего, ImageMagick является платформнонезависимым: на сайте разработчиков можно найти установочные пакеты для Windows, Linux, Mac OS X, Solaris, FreeBSD и Cygwin. Помимо этого, редактор распространяется под свободной лицензией, совместимой с GPL, благодаря чему доступны все исходные коды, а пользователи практически ничем не ограничены в плане использования программы и ее «подгонки» под свои специфические цели. Но и это еще не все: авторы предлагают более десятка различных вариантов интерфейса ImageMagick, написанных на C, C++, Java, Perl, PHP и других, более экзотических языках. Несмотря на довольно аскетичный внешний вид (остающийся неизменным несколько последних лет), свое дело ImageMagick делает хорошо и к тому же освобождает авторов программы от излишних хлопот по внедрению и отладке новомодных веяний интерфейсостроения, позволяя уделять больше внимания совершенствованию функциональных возможностей. Подобная неприхотливость редактора способствует полноценному выполнению своих функций в любом программном окружении, а также открывает большой простор для интеграции с другими приложениями. Особенно рады этому разработчики свободного ПО: библиотеки ImageMagick входят в состав многих GNU/ Linux-дистрибутивов и часто используются различными программами, обладающими функциями просмотра или редактирования изображений. Наличие же в системе одного из вариантов интерфейса позволяет работать с ImageMagick как с обычным графическим редактором (рис. 1).

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

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


Рисуй, консоль!

На первый взгляд работа с графикой в консольном режиме кажется невозможной: все мы привыкли, что на дисплее отображается некий графический объект, с которым мы поэтапно производим различные манипуляции. При этом на обработку одного изображения нередко уходит слишком много времени. Благодаря использованию командной строки, ImageMagick позволяет делать то же самое, но одномоментно, а при необходимости - и в пакетном режиме, применяя одни и те же средства редактирования сразу ко множеству файлов. По принципу работы этот необычный способ напоминает командный интерпретатор, хорошо знакомый пользователям GNU/Linux-систем. Сначала вводится команда, далее - набор параметров, указывающих последовательность и содержащих описание действий, которые необходимо выполнить команде в отношении указанного объекта. Таким образом, при наличии некоторых навыков работа, занимающая обычно несколько минут, выполняется в считанные секунды. В качестве примера предположим, что нам нужно поместить рисунки police.jpg и boat.jpg в рамку, снабдить подписью, разместить все это на синем фоне, а конечный результат преобразовать в формат png. В обычном редакторе эта задача выполняется в несколько довольно затратных по времени этапов, а для ImageMagick достаточно войти в режим командной строки (или открыть консоль в случае работы в UNIX-подобной операционной системе), перейти в каталог с изображениями и ввести следующую последовательность:

montage -label %f -frame 5 -background blue -geometry +4+4 boat.jpg police.jpg galery.png

В результате через секунду в каталоге с исходными изображениями появится то, что требовалось (рис. 3).

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

convert -size 600x85 xc:transparent -font Bookman-DemiItalic -pointsize 72 -draw “text 25,60 ‘Компьютерра’” -channel RGBA -gaussian 0x6 -fill darkblue -stroke white -draw “text 20,55 ‘Компьютерра’” computerra-title.png

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

Также можно создавать и более сложные варианты текстовой графики, одновременно добавляя фоновый рисунок, сгенерированный самим редактором или взятый извне. Список параметров в этом случае значительно увеличится, и для сохранения журнального места и психического равновесия читателей мы его не приводим. Впрочем, на скорость выполнения команды разрастание кода практически не повлияет. Через пару секунд в нашем распоряжении окажется файл, на создание которого с помощью обычных графических редакторов ушло бы не меньше часа-двух (рис. 5).

Всего в ImageMagick насчитывается одиннадцать команд, фактически являющихся отдельными приложениями (см. врезку). Каждой из них соответствует по несколько десятков параметров, что позволяет очень точно указывать, какие действия необходимо произвести с исходным материалом. Учитывая, что практически каждому параметру можно присвоить сотни значений, можно представить, насколько гибкий и мощный инструмент попадает в наши руки после установки ImageMagick на компьютер. Естественно, все функции, доступные при работе в графическом интерфейсе этого редактора, тоже остаются в нашем распоряжении, только для их использования уже не придется гонять курсор мыши по меню.

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

Заканчивая рассказ об ImageMagick, отмечу, что для большинства пользователей, работающих с графикой от случая к случаю, использование этой программы может оказаться не совсем рациональным: не исключено, что быстрее выполнить небольшую работу привычным способом, нежели изучать консольные команды. Впрочем, при совершении простых однотипных операций над большим количеством изображений (например, изменение размера или добавление подписи) ImageMagick, используемый вместе с каким-нибудь скриптовым языком (bash, Perl, Python или собственным Magick Scripting Language), может существенно сэкономить время. Для тех же, кто постоянно занимается созданием и редактированием графических изображений, ImageMagick может стать неплохим инструментом, если не заменяющим, то весьма удачно дополняющим даже самые именитые программы.


Ссылки

imagemagick.org - официальный сайт проекта: релизы для скачивания, исчерпывающая документация, полезные ссылки.

www.cit.gu.edu.au/~anthony/graphics/imagick6 - обширная галерея примеров использования ImageMagick.


Команды пакета ImageMagick

• animate - отображение анимации (слайд-шоу) из набора файлов через X-сервер;

• compare - визуальное сравнение файлов и количественная оценка степени их схожести;

• composite - наложение изображений;

• conjure - выполнение скриптов на собственном языке Magick Scripting Language;

• convert - конвертирование изображений из одного формата в другой, а также применение к ним самых разнообразных операций (изменение размера, наложение фильтров и т. д.);

• display - отображение изображений и слайд-шоу через X-сервер;

• identify - получение информации о формате и параметрах одного или нескольких графических файлов;

• import - сохранение скриншотов произвольных областей экрана;

• mogrify - изменение размера изображения или применение к нему различных операций. Отличается от convert тем, что меняет исходный файл, а не создает новый;

• montage - объединение нескольких изображений в одно;

• stream - средство сохранения информации о цветовых каналах в различные форматы.