воскресенье, 30 ноября 2008 г.

Introduction in Magic of Images

Введение в Магию Изображений

Введение

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 комментария:

souriz комментирует...

+10 -- полезная статья

tinman321 комментирует...

ну хорошо...

-=Sphynkx=- комментирует...

В дополнение к сказанному, до кучи - еще ссылка на русскоязычное описание пакета ImageMagick.

tinman321 комментирует...

в одном из номеров LinuxFormat была такая тема, очень на мою версию похожа, кстати