1 апреля 2009 г.

ImageMagick

А вот еще одна статья из журнала Linux Format
В догонку заметке из журнала Full Circle , которую я оставил ниже, про редактрирование изображений из командной строки.
Как всегда, будет очень интересно =)


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

Для этого нам понадобиться утилита convert с опцией -sample.
Например, чтобы получить изображение размером 350 x 300 пикселей, достаточно ввести команду:

# convert -sample 350x300 penguin.jpg spenguin.jpg

где penguin.jpg – входящие изображение, а spenguin.jpg – файл, получаемый на выходе утилиты convert.

Стоит отметить, что умный ImageMagick умеет автоматически соблюдать соотношение сторон изображения.
Это означает, что пропорции новой картинки (созданной вами миниатюры) будут правильными.
В приведенном выше примере, мы фактически получили 350 x 263 пикселей вместо запрашиваемых 350 x 300, а объем файла составил всего 16,4 КБ. При этом качество изображения осталось по-прежнему удовлетворительным.

Другой, не менее интересный способ указания размеров выходного изображения – проценты.
Это может быть удобно, если вы не уверены в размере входящего изображения, или если вам важен не точный размер, а только приблизительные габариты.
Например, чтобы уменьшить картинку в 4 раза, можно поступить так:

# convert -sample 25%x25% penguin.jpg spenguin.jpg

Утилита convert сгенерирует изображение размером 25% от исходного. Поиграв с процентами и пикселями, вы сможете получить результат, которым останетесь довольны.

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

for i in `ls *.jpg`
do
convert -sample 25%x25% $i thumb-$i
done
Поднакопив некоторое количество таких мини-сценариев, вы сможете использовать их ежедневно, даже не задумываясь о том, что внутри. Решение типичных задач сведется к паре-тройке нажатий на клавиши, и ImageMagick будет управляться с работой, пока вы попиваете утренний кофе.

Аватара для автора

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

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

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

# convert +raise 10x10 spenguin.jpg rpenguin.jpg

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

Наше изображение по своей природе является фотоснимком,а на фотографиях принято ставить место и дату съемки.
Давайте сделаем это, нанеся на картинку водяной знак.
Чтобы добавить на изображение текст, достаточно выполнить команду:

# convert -font helvetica -fill white -pointsize 26 \-draw 'text 180,30 "Alaska, 2002"' spenguin.jpg com_pinguin.jpg

Что это за магические числа в параметре -draw 'text 180,30...?
Это – координаты подписи на рисунке в формате x,y,
где x – смещение от левого края, а y – от верхней грани (в пикселях).


Следующим и финальным шагом будет выполнение команды, которая внесет последний штрих, то есть придаст картинке вид фотокарточки

# convert -caption '%c' com_pinguin.jpg -thumbnail '900x900>' \ -font Ravie -gravity center -bordercolor Lavender \ -background navy -polaroid -0 final.png

Конечно, вы можете немного поэкспериментировать, проявив всю вашу фантазию и смекалку, и добиться куда более интересных эффектов.

ImageMagick дает воистину бесконечные возможности и вариативность. Остается только ими воспользоваться.

Немного о главном


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

Представим на секунду, что вы увлекаетесь фотографией (а кто ею не увлекается?) и являетесь счастливым обладателем цифровой фотокамеры с разрешением в 10–12 МПикс.
Вы любите фотографировать все, что придется: домашних животных, друзей, закаты... себя, в конце концов!
Помимо этого, вы имеете web-страничку или ведете блог, где публикуете отснятое: приятно поделиться эмоциями со всем миром.

Но что делать, если почти все ваши фотографии получаются на «отлично», и все их непременно нужно выгрузить?
Ведь каждый снимок – это 3–5 МБ; выкладывая такое в Сеть, вы потеряете кучу времени, да еще и забьете под завязку жесткий диск.

Вот тут-то и придет на помощь всемогущий convert, который избавит вас от масштабирования каждой фотографии в графическом редакторе.

Когда я только познакомился с GIMP, я радовался тому, как легко и просто в нем изменить размер изображения с 3022 х 2304 на 800 х 600, сохранив при этом качество и «облегчив» картинку с 4 до 0,5 МБ.

Но когда встала задача изменения размеров 3500 изображений, от радости не осталось и следа.

ImageMagick со своей утилитой convert оказался здесь как нельзя более кстати.

Выполнив команду:

# convert -resize 1024 -quality 90 input.jpg output.jpg

вы получите изображение с разрешением 1024 x 768 (помните, что convert – умная утилита и учитывает соотношение сторон, не «ломая» картинку) и объемом всего 254 КБ.

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

Я также задействовал утилиту composite, для наложения на наши фотографии водяного знака.

Основная часть сценария выглядит так (полный текст вы найдете на LXFDVD):

WATERMARK="/home/booch/w.png"
for i in *.JPG
do
echo "Working on $i ..."
convert -resize 1024 -quality 89 $i $i 2> /dev/null
composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null
done


Принцип работы предельно прост.
В переменной WATERMARK указан путь, где лежит картинка, которую мы будем использовать в качестве водяного знака (ключ -dissolve 75 в вызове composite указывает на желаемую степень прозрачности).

Запустив скрипт в текущем каталоге, вы выполните масштабирование всех JPG-файлов до 1024 x 768 с качеством 90 и прикрепите водяной знак в левом нижнем углу (southeast).

В итоге, операция по изменению больших массивов изображений сводится к банальному запуску скрипта в текущей директории.

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

Но вы сами при этом будете абсолютно свободны и, пока работает скрипт,
сможете успеть сделать что нибудь другое, значительно более творческое. LXF


Aвтор статьи, эксперт Александр Бербер
Имеет несколько десятков гигабайт фотографий и считает Linux лучшей платформой для их хранения и обработки.



Хотите знать больше?
Желаете скруглить углы или поместить снимок в рамку «под дерево»?
Нет ничего проще – заходите на www.linuxformat.ru/mag/im.txt

Комментариев нет: