Введение в Магию Изображений
Введение
ImageMagick — это набор свободных программ по созданию, редактированию и компоновке изображений для основных операционных систем. Он поддерживает порядка 100 форматов изображений, полный список которых можно посмотреть на странице http://www.imagemagick.org/script/formats.php (или с помощью консольной команды «identify -list format», если ImageMagick установлен).
Основное отличие ImageMagick от таких программ как GIMP и Photoshop, которыми большинство пользователей привыкло пользоваться, состоит в том, что ImageMagick не имеет графического интерфейса и управляется командами. Компонентами ImageMagick можно пользоваться из командной строки или при помощи программных интерфейсов (существуют интерфейсы к таким языкам программирования, как C, C++, Java, Pascal, Perl, PHP, Python, Ruby, Tcl/Tk и др.). ImageMagick — это очень мощное средство, использовать которое удобней в работе с большим количеством изображений, либо когда возникает необходимость в повторении одной операции. А с помощью программных интерфейсов можно создавать изображения «на лету», используя например, для генерации CAPTCHA.
Теория
ImageMagick состоит из нескольких утилит для командной строки. Для того, чтобы с помощью ImageMagick вывести изображение на дисплей используются две утилиты, первая display. Используя ее, можно задать размер для отображения, добавить цветную рамку, отрегулировать контраст и пр. Вторая утилита — animate, она позволяет просматривать анимированные файлы (gif), а также все файлы одного формата в папке в виде одного анимированного файла.
Чтобы узнать информацию о конкретном файле, а также просмотреть списки шрифтов, доступных команд, поддерживаемых форматов и прочее, используется утилита identify.
Для редактирования изображений также используется несколько команд: composite, montage, convert и mogrify. Composite позволяет наложить одно изображение на другое, montage создает сложное изображение, составленное из нескольких других. Основное различие двух других утилит в том, что convert создает отдельный файл со всеми изменениями, а mogrify работает с исходным файлом, в остальном они идентичны.
Более подробная информация, а также описание некоторых других утилит находится на сайте проекта: http://www.imagemagick.org/script/command-line-tools.php. Если же ImageMagick уже установлен на компьютере: file:///usr/share/doc/imagemagick/www/command-line-tools.html
Большинство операций в ImageMagick в командной строке выглядят так:
# utility -options [parameters] file1 file2
Где:
utility — используемая в данном случае утилита из пакета ImageMagick;
file1 — это путь к файлу изображения, над которым проводится операция;
file2 — это путь к файлу, который будет получен в результате операции;
-options — это команды, которые непосредственно определяют, что делать с изображением;
[parameters] — сопутствующие командам параметры для изменения.
Далее, на примере создания открытки из фотографии, я покажу процесс работы в ImageMagick.
Практика
Чтобы не возникало путаницы, далее везде будет использована утилита convert, однако приведенные команды доступны и для других утилит.
Для начала добавим декоративные элементы, например, рамку, которая будет имитировать 3D-эффект и «приподнимет» изображение. Воспользуемся командой -raise — она доступна для convert, mogrify, animate (для обратного 3D-эффекта существует +raise). Параметр widthxheight для данной команды задает ширину и высоту рамки в пикселях.
# convert -raise 25x25 file1 file2
Добавим надпись «С праздником!» к нашему изображению. За это (а также за отрисовку других базисных элементов) отвечает команда -draw (для convert и mogrify). Параметр type заключен в одиночные кавычки с обеих сторон. В данном случае мы используем text с указанием через запятую координат расположения текстового блока в изображении в пикселях, точкой отсчета является верхний левый край — 40,635 (разрешение изображения 1024x683), а затем в кавычках пишем текст.
# convert -draw 'text 40,635 "С праздником!"' file2 file3
Как можно заметить, текст создается для уже отредактированного изображения. Шрифт тоже можно настроить — для этого параметром -font
указы
вае
тся имя (посмотреть доступные имена можно набрав команду «identify -list type») или путь к
нужному файлу шрифта
(поддерживаются шрифты TrueType, GhostScript и X11)
, в
-fill color
— цвет, который можно задать названием (все доступные — «
identify -list color») или в виде RGB(A), а в
-pointsize
— размер в пикселях. Комбинируя эти три команды и предыдущую, задав цвет
lightblue2
, размер
88
и шрифт
Bookman-Light
, получим:
# convert -font Bookman-Light -fill lightblue2 -pointsize 88 -draw 'text 40,635 "С праздником!"' file2 file3
Обращаю внимание на последовательность команд сначала необходимо задать определение шрифта, и только потом выполнять команду его создания, использую -draw.
Теперь повернем имеющееся изображение: для этого воспользуемся командой -rotate, которой соответствуют параметр degree с указанием (в градусах) угла поворота изображения, где положительное значение поворачивает по часовой стрелке, а отрицательное — против:
# convert -rotate -5 file3 file4
Таким образом, изображение повернуто на 5 градусов против часовой стрелки, его размер изменился и появился белый фон. Для смены фона воспользуемся командой -background с параметром color, непосредственно определяющим цвет:
# convert -background lightblue4 file4 file5
Работа почти завершена: остается лишь сделать из изображения открытку малого размера. Для этого есть команда -resize с параметром geometry. Задавать размеры можно двумя способами: в процентом и пиксельном выражениях. При изменении размера ImageMagick сохраняет первоначальные пропорции. Чтобы избежать этого, в конец нужно добавить «!»: например, 1024x768! для любого изображения задаст именно такой размер. Если же требуется сохранить пропорции и ограничить длину или ширину, можно задать только один размер: например, 50%, или x480. Нам нужно, чтобы ширина открытки не превышала 600 пикселей:
# convert -resize 600x file5 file6
Готово!
Полезные дополнения
Зная все необходимые команды и порядок их выполнения, все вышеприведенные операции можно объединить в одну:
# convert -raise 25x25 -font Bookman-Light -fill lightblue2 -pointsize 88 -draw 'text 40,635 "С праздником!"' -rotate -5 -background lightblue4 -resize 600x file1 file2
При помощи команды -sample geometry создается миниатюра:
# convert -sample 100x file2 file3
Изменяется формат изображения тривиально, для упрощения используем наиболее распространенные форматы:
# convert file.jpg file.png
Тут же можно настроить качество сжатия, используйте -quality с параметром value для этих целей.
Полученный скрипт можно также применить к массивам изображений одного типа, тут же можно переконвертировать все файлы из одного в другой формат. Если выбрать форматы png и jpg, то выглядеть это будет следующим образом:
# convert -raise 25x25 -font Bookman-Light -fill lightblue2 -pointsize 88 -draw 'text 40,635 "С праздником!"' -rotate -5 -background lightblue4 -resize 600x *png img-%03d.jpg
Все полученные изображения будут уже в формате jpg и называться img-000.jpg, img-001.jpg, img-002.jpg и так далее.
Заключение
Об ImageMagick можно писать и рассказывать долго, эта статья лишь небольшое вступление в «Магию манипуляций изображениями», если есть желание подробнее ознакомиться с тем, что предлагают нам разработчики, то рекомендую почитать «Примеры использования ImageMagick» на сайте проекта: http://www.imagemagick.org/Usage/
Получившаяся открытка
4 комментария:
+10 -- полезная статья
ну хорошо...
В дополнение к сказанному, до кучи - еще ссылка на русскоязычное описание пакета ImageMagick.
в одном из номеров LinuxFormat была такая тема, очень на мою версию похожа, кстати
Отправить комментарий