Журнал «Компьютерра» № 33 от 12 сентября 2006 года, стр. 12

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

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

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

Когда разговор заходит о растровых графических редакторах, абсолютное большинство людей в первую очередь вспоминает 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).

Журнал «Компьютерра» № 33 от 12 сентября 2006 года - _653q6h1.jpg

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

Журнал «Компьютерра» № 33 от 12 сентября 2006 года - _653e6j2.jpg

Впрочем, нет смысла подробно описывать все функциональные возможности программы, доступные из графического интерфейса: во-первых, пользователям других редакторов они привычны, а во-вторых, полный список вариантов изменения изображений явно уступает арсеналу более известных собратьев. На самом деле 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).

Журнал «Компьютерра» № 33 от 12 сентября 2006 года - _653j6g3.jpg

Впрочем, работа с уже существующими изображениями выглядит не так эффектно. Чтобы усложнить задачу, попробуем создать графический файл из обычного текста. Как правило, именно изготовление красочных надписей или заголовочных баннеров отнимает массу времени и сил. Приходится работать со слоями, постепенно добавляя к тексту необходимые декорации в виде, например, обрамления букв и тени. 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).

Журнал «Компьютерра» № 33 от 12 сентября 2006 года - _653d6l4.jpg

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

Журнал «Компьютерра» № 33 от 12 сентября 2006 года - _653u6k5.jpg

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