19 апреля 2015 г.

ImageMagick = добавляем поля к изображениям или фото под Ubuntu

Сегодня расскажу, как можно быстро добавить поля (или границы, кому как больше нравится) к нескольким изображениям или фото. Для этого воспользуемся утилитой convert из набора ImageMagick. Это довольно распространенный пакет, найти его можно практически в любом дистрибутиве Linux.

Для установки под Ubuntu выполним команду:

sudo apt-get install imagemagick

Теперь можем приступать. Для примера возьмем вот эту картинку из википедии:
фото для манипуляций

Чтобы добавить границы к изображению, наберем в терминале:
convert -bordercolor '#00FFFF' -border 70x50 lemon.jpg lemon1.jpg
В результате получим:
добавляем границы со всех сторон

Теперь по порядку. Опцией bordercolor мы задаем цвет границ, можно указывать в формате HTML, название цвета или через директиву rgb, выглядит это вот так (результат будет идентичен):

convert -bordercolor aqua -border 70x50 lemon.jpg lemon1.jpg
convert -bordercolor '#0FF' -border 70x50 lemon.jpg lemon1.jpg
convert -bordercolor 'rgb(0, 255, 255)' -border 70x50 lemon.jpg lemon1.jpg
convert -bordercolor 'rgb(0, 100%, 100%)' -border 70x50 lemon.jpg lemon1.jpg

Опцией border указываем размеры границы. Есть несколько вариантов передачи параметров. Рассмотрим их на примерах. Первый вариант имеет формат XxY, где X - размер границы слева и справа от изображения, Y - сверху и снизу:

convert -bordercolor yellow -border 70x50 lemon.jpg lemon1.jpg
convert -bordercolor yellow -border 70x0 lemon.jpg lemon2.jpg
convert -bordercolor yellow -border 0x50 lemon.jpg lemon3.jpg

Соответственно получим:
поля со всех сторонполя слева и справаполя сверху и снизу

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

convert -bordercolor '#808000' -border 20%x10% lemon.jpg lemon4.jpg
convert -bordercolor '#808000' -border 20%x0% lemon.jpg lemon5.jpg
convert -bordercolor '#808000' -border 0%x10% lemon.jpg lemon6.jpg

Получим:
поля со всех сторонполя слева и справаполя сверху и снизу

Третий вариант - просто указываем размеры границы в пикселях или в процентах от ширины/высоты (этот вариант очень удобен, так как размер высчитывается отдельно от ширины и высоты):

convert -bordercolor 'rgb(173, 255, 47)' -border 50 lemon.jpg lemon7.jpg
convert -bordercolor 'rgb(173, 255, 47)' -border 15% lemon.jpg lemon8.jpg

В результате получаем:

Чтобы сделать прозрачную границу (обратим внимание, что не все форматы поддерживают альфа-канал), добавим опцию matte и в качестве цвета укажем none:

convert -matte -bordercolor none -border 10% lemon.jpg lemon9.png

Результат:
прозрачные поля
С опциями разобрались. Теперь расскажу как обработать сразу несколько изображений. Для этого есть 2 способа - воспользоваться командой mogrify или использовать bash-скрипт.

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

mogrify -bordercolor white -border 30 *.jpg

В результате ко всем изображениям в формате jpg будет добавлена белая рамка. (ВАЖНО! в таком формате все изображения будут перезаписаны! Будьте внимательны и храните копии изображений). Чтобы избежать этого, укажем формат выходного файла:

mogrify -bordercolor white -border 30 -format png  *.jpg

В результате мы получим файлы с такими же именами, но в другом формате. Но это неудобный способ, так как смена формата туда обратно снижает качество картинки. Поэтому воспользуемся bash скриптом:

#!/bin/bash

img=("$@")
count=${#img[@]}

for (( i=0; i<$count; i++ )); do
 name=${img[${i}]%.*}
 convert -bordercolor white -border 100x30 "${img[${i}]}" "$name bord.jpg"
done

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

Для запуска скрипта скопируйте его в текстовый файл, который назовите, например, add_border.sh и добавьте возможность запуска командой chmod u+x add_border.sh 

Скрипт запускам командой:
./add_border.sh files*.jpg

Файлы можно указывать и как:
./add_border.sh file1.jpg file2.jpg и так далее.

На этом все.
Всего вам доброго.

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

Отправить комментарий