Как в Mac OS работать с графическими файлами с помощью ImageMagick


ImageMagick — это очень удобная утилита для работы с графическими файлами, которую можно применять для пакетной обработки, преобразования и других операций над графическими файлами. ImageMagick — это исключительно мощный пакет на основе свободного кода, содержащий множество утилит по редактированию и созданию графики. Достаточно сказать, что, введя из командной строки единственную команду, вы можете выполнить типовую операцию по редактированию — вращение (rotate), перемасштабирование (resize), слияние (merge), преобразование (convert) и т. п., над множеством графических файлов одновременно.Для установки ImageMagick можно воспользоваться Fink или MacPorts или же установить программу вручную, скачав готовую сборку с сайта ImageMagick (http://www.imagemagick.org). Как только вы установите ImageMagick, вы сможете начинать экспериментировать с простыми командами (например, convert). Когда вы освоитесь с ImageMagick, то вполне возможно, что вы даже предпочтете его графическому редактору, которым пользовались до этого. Каждая из команд ImageMagick должна запускаться из командной строки. Чтобы исследовать каждую команду в подробностях, воспользуйтесь традиционным методом — чтением man-страниц (например, man convert) или скачайте подробную документацию с Web-сайта ImageMagick.

Преобразование форматов файлов

С помощью ImageMagick преобразование файла выполняется не сложнее, чем простая замена расширения имени файла, например:

1$ convert flower.jpg flower.png

Иными словами, для преобразования достаточно заменить расширение имени файла на расширение, соответствующее любому из поддерживаемых форматов (например, .png на .gif). Всего поддерживается около сотни различных форматов.

Мгновенное создание миниатюр

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

1$ convert flower.jpg -resize 50% flower50.jpg

Эта команда уменьшает размер файла flower.jpg на 50% и сохраняет результат в новом файле с именем flower50.jpg. Команда convert всегда создает новый файл, и последний аргумент представляет собой имя, которое вы присваиваете этому новому файлу. Рассмотрим еще одну команду:

1$ convert flower.jpg -resize 50×50 flower5050.jpg

Эта команда создает миниатюру файла flower.jpg размером 50×50. Комбинируя различные опции ImageMagick, вы можете, например, перемасштабировать графический файл и одновременно преобразовать его в другой формат, например:

1$ convert flower.jpg -resize 50% flower50.png

Вращение набора картинок

Вращение графического файла выполняется так же просто, как и преобразование формата или перемасштабирование. Рассмотрим пример, показанный на рис. 4.6. В данном случае картинка из файла flower.jpg была повернута на 30 градусов по часовой стрелке. Получившееся изображение будет больше, чем исходное, и, соответственно, и файл будет увеличен в размерах. Вращение выполняется следующей командой:


Рис. 4.6. Картинка, получившаяся в результате поворота исходного файла flower.jpg на 30 градусов по часовой стрелке
Рис. 4.6. Картинка, получившаяся в результате поворота исходного файла flower.jpg на 30 градусов по часовой стрелке

Разумеется, ситуации, когда вам захочется выполнить поворот вашей фотографии на 90 или 270 градусов, встречаются гораздо чаще. Тем не менее, полет вашей фантазии ничем не ограничен.

Добавление текстовых заголовков

Иногда в графический файл требуется добавить текстовый заголовок. Сделать это можно и в большинстве других редакторов с графическим пользовательским интерфейсом, благо они это позволяют. Но ImageMagick упрощает эту задачу до предела — особенно с учетом того, что один и тот же текст можно добавить к большому количеству графических файлов. Например, у вас может возникнуть желание добавить «водяной знак» (watermark), подзаголовок с названием альбома или уведомление об авторских правах на фотографию. Рассмотрим следующий пример:

1$ convert flower.jpg -draw ‘text 10,10 «Nifty Text!»‘ flowerNifty.jpg

Данная команда добавляет строку Nifty Text! в файл flower.jpg, причем координаты ее расположения (10,10) отсчитываются от верхнего левого угла. При желании вы можете изменить и начертание и размер шрифта (рис. 4.7). Чтобы сделать это, дайте следующую команду:

Рис. 4.7. Добавление текста в графический файл
Рис. 4.7. Добавление текста в графический файл

Приобретя достаточный опыт, вы сможете выполнять подобные операции над множеством файлов одновременно, практически не задумываясь.

Создание текстового баннера

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

1234$ convert -size 200×40 xc:transparent -font Courier-Regular -pointsize 20 -channel RGBA -gaussian 0x6 -fill darkred -stroke magenta -draw ‘text 10,30 «My Nifty Banner!’ nifty-magick.png

Результат выполнения этой команды показан на рис. 4.8.

Рис. 4.8. Текстовый баннер, полученный с помощью ImageMagic
Рис. 4.8. Текстовый баннер, полученный с помощью ImageMagic

В рассматриваемом примере был создан прозрачный текстовый баннер размером 200×40, и с пурпурным текстом My Nifty Banner!, расположенным по указанным координатам (10,30). Поэкспериментировав, вы увидите, что команда convert предоставляет намного более широкие возможности, чем можно описать в этом коротком разделе.

Создание монтажа

ImageMagick имеет специальную команду для создания фотомонтажа, о чем несложно догадаться и по ее названию — montage. В дополнение к созданию монтажа вы можете задать для него фон, рамку и присвоить каждой картинке заголовок (рис. 4.9). Монтаж, показанный на этой иллюстрации, был получен следующей командой:

Рис. 4.9. Пример создания монтажа из нескольких картинок
Рис. 4.9. Пример создания монтажа из нескольких картинок

Рассматриваемая команда настолько проста, что почти не нуждается в пояснениях. Как несложно понять, она создает композицию из всех графических файлов с расширением .jpg, расположенных в текущем каталоге, на что указывает аргумент *.jpg. Результирующая композиция имеет серый фон и сохраняется в файле montage.jpg. Аргумент -label %f присваивает каждой картинке текстовую метку, генерирующуюся из имени файла. Аргумент -border 1 указывает на то, что каждая картинка должна иметь тонкую рамку.

Получение информации о графическом файле

Для получения базовой информации о графическом файле достаточно ввести следующую простую команду:

1$ identify flower.jpg

В результате исполнения этой команды на экране появится следующая информация:

1flower.jpg JPEG 1024×859 1024×859+0+0 DirectClass 8-bit 347.061kb

Чтобы получить более подробную информацию, включая данные EXIF24, дайте следующую команду:

1$ identify -verbose flower.jpg

Вы можете даже избирательно извлекать из файла только интересующую вас информацию, например:

1$ identify -format «%f %wx%hn» *.jpg

Данная команда отобразит только ту информацию, которая была запрошена (%f — имя файла, %w — ширина, %h — высота). В результате работы этой команды на экран будет выведен список всех файлов с расширением .jpg, хранящихся в данном каталоге, плюс запрошенная информация о каждом из них. Вывод этой команды показан в листинге.

12345678910// Избирательный вывод информации о файлах с помощью//команды identifyflower.jpg 1024x859flower270r.jpg 859x1024flower30r.jpg 1316x1255flower50.jpg 512x430flower5050.jpg 50x42flower90r.jpg 859x1024flowerNifty.jpg 512x430montage.jpg 520×288

Пакетные операции над графическими файлами

Во многих случаях использования символов шаблона (например, *.jpg) уже достаточно для одновременного выполнения заданной операции над множеством графических файлов, например:

1$ mogrify -resize 200×200 *.jpg

Эта команда перемасштабирует каждый файл формата JPEG, найденный в каталоге, до размера 200×200 с сохранением их имен. Команда mogrify аналогична команде convert, с тем лишь отличием, что она перезаписывает исходный файл, а не создает новый. Поэтому при работе с ней будьте внимательны. Если вы хотите сохранить оригинал, следует пользоваться командой convert. Однако, чтобы применить эту команду к большому количеству файлов, вам потребуется написать несложный скрипт (о написании скриптов говорилось в рецепте 32). Пример такого скрипта показан в листинге.

// Применение команды convert к большому количеству файлов
for image in *.jpg
do
convert $image -resize 200×200 size200-$image
doneСкрипт, приведенный в листинге, обрабатывает каждый файл формата JPEG, найденный в текущем каталоге. Он открывает файл, перемасштабирует его до размера 200×200 и сохраняет результат в файле с другим именем.

Имя результирующего файла формируется из имени исходного с добавлением префикса size200-. Отредактируйте этот скрипт и поэкспериментируйте с ним над теми файлами, которые не представляют для вас большой ценности. Эта возможность просто неоценима при обработке большого количества файлов — например, когда вам требуется создать большое количество миниатюр для Web-сайта или получить файлы меньшего размера для пересылки по электронной почте.

Если вы хорошо владеете языками командных сценариев, вы очень быстро догадаетесь о том, как удобно использовать ImageMagick в качестве части другого, более масштабного проекта, или при написании скриптов для автоматизации однообразной работы.