Это старая версия документа.


ImageMagick - это кроссплатформенный, консольный редактор изображений, а точнее набор консольных программ. Конечно же, большинство манипуляций с изображениями позволяют сделать такие графические редакторы как GIMP и Photoshop, но если требуется повторение заданных преобразований множество раз - то ImageMagick подходит как нельзя лучше. На данный момент в статье рассмотрена работа с утилитами convert, montage, identify и composite.

Использование convert

convert <input_image> <commands> <out_image>
convert ubuntu_logo.png -resize 100% ubuntu_out_logo.jpg

В качестве основных изображений возьмем лого Ubuntu и тукса:

ОпцияПримерОписание
-resize <MMMxNNN> -resize 50 Изменяем размер изображения в пикселях, с сохранением соотношения сторон.
* -resize 200х100 и -resize 200 дадут одинаковый результат

-resize <MMMxNNN!> -resize 100×50! Изменяем размер изображения в пикселях, без сохранения соотношения сторон

-resize <@PPP> -resize @100 Задаем количество пикселей в изображении.
* из изображения 100х100 пикселей, при -resize @100, получим изображение 10х10 пикселей. 10*10 = 100 пикселей


-resize <MMM%> -resize 33% Изменяем размер изображения в процентах

-scale <МММ%> -scale 33% Масштабируем. Тоже что и -resize <MMM%> но более быстро, и с худшим качеством

-gravity <type> -gravity Center Задаем положение относительно сцены (примеры ниже). North, West, Center, East, South…
*полный список можно получить командой convert -list gravity


FIXME добавить пример для -crop 100×100

-crop <geometry> -crop 100×100+0+0 Обрезаем.
* заметьте, что -crop 100×100 не обрежет изображение до 100 на 100 пикселей относительно верхнего левого угла, а нарежет все изображение на кусочки заданного размера. Если у нас было изображение 1000х1000пикс, то мы получим 100 кусочков 100×100.

Примеры:

convert ubuntu_logo.png -gravity Center -crop 100x100+0 out.png

convert ubuntu_logo.png -gravity NorthWest -crop 100x100+0 out.png

-rotate <degrees> -rotate +90 Вращаем изображение

* при повороте на градус кратный 90 - изображение будет просто менять ориентацию. А вот при повороте, скажем, на 45 градусов, выйдет что то такое (для контраста, фон сделан черным):

Как видим, разрешение изображения увеличилось. Фон, стандартный, будет белым, но его можно изменить командой -background, в данном случае -background black.

-flip Отражаем по вертикали

-flop Отражаем по горизонтали

-blur radius -blur 10 Применяем Гауссово размытие

+append +append logo_gray.png logo.png logo.png logo_out.png Объединяем горизонтально. Справа-налево

-append -append logo_gray.png logo.png logo.png logo_out.png Объединяем вертикально. Сверху-вниз

-negate Инвертируем цвета изображения

-colorspace <value> -colorspace Gray Переводим изображения в другие цветовые пространства. Полный список

-depth <value> -depth 8 Изменяем разрядности изображения


-quality <value> -quality 80 Задаем качество выходного изображения (92 - стандартно для jpg, 75 - для png)


Использование montage

montage <input_image> <commands> <out_image>

Примеры:

montage *.png -auto-orient  -thumbnail 200x200 -bordercolor Lavender -background black +polaroid -resize 30% -gravity center -background none -extent 80x80 -background white -geometry -10+2  -tile x1  out.png

montage logo.png logo.png logo.png logo.png logo.png logo.png -geometry 100x100+1+1 -background black out.png


Использование identify

  • Получение информации о изображении:
identify <commands> <image>
  • Короткая информация о изображении:
identify ubuntu_logo.png
  • Полная информация о изображении:
identify -verbose ubuntu_logo.png


Использование composite

Утилита composite накладывает одно изображение на другое следуя заданным параметрам.

composite <commands> <input_image> <out_image>

Для примера создадим изображение с прозрачным фоном и высотой 45 пикселей:

convert -background transparent -pointsize 45 label:'Ubuntu' ubuntu.png

Наложим его на уже имеющиеся изображение:

composite -gravity south ubuntu.png ubuntu_logo.png main.png


Примеры

  • Конвертирование всех *.png изображений в *.jpg, и переименование их по шаблону:
convert *.png new%03d.jpg

получим изображения, с именами, вида: new000.jpg new001.jpg new002.jpg и тд.


  • Ресайз(изменение размеров) всех *.png в папке, до размера 100 пикс и с качеством равным 75%:
find . -iregex '.*.png' -exec convert '{}' -resize 100 -quality 75 png:'{}' \;


  • Создание gif-анимации:
convert -delay 8 -size 400x400 *.png -loop 0 animation.gif
-delay Количество смен изображений за секунду, по умолчанию 10 (100мс)
-loop количество повторов, 0 - неограниченно

FIXME нужна анимашка


  • Отображение готового изображения без сохранения (опция show:):
convert logo.png -resize 100 -quality 75 show:out.jpg


  • Скругление краев:
convert logo_negate.png  
          \( +clone -alpha extract -draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' 
          \( +clone -flip \) -compose Multiply -composite 
          \( +clone -flop \) -compose Multiply -composite \) 
          -alpha off -compose CopyOpacity -composite  rounded_corners.png


  • Демотиватор =):
convert logo.png \
          -bordercolor black -border 3   -bordercolor white -border 2 \
          \( -background black -fill white -pointsize 24 \
             label:Ubuntu   -trim +repage \
             -bordercolor black -border 10 \
          \) -gravity South -append \
          -bordercolor black -border 10   -gravity South -chop 0x10 \
          border_framework.png


  • Добавление тени:
convert -page +4+4 thumbnail.gif -matte \
          \( +clone -background black -shadow 60x4+4+4 \) +swap \
          -background none -mosaic     shadow_soft.png


  • Просмотр списка всех шрифтов в системе:
convert -list font | grep Font


Новые примеры приветствуются.

Ссылки