Это старая версия документа.
Содержание
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 |
добавить пример для -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 - неограниченно |
- Отображаем готовое изображение без сохранения (опция 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 navy -shadow 60x4+4+4 \) +swap \ -background none -mosaic shadow_soft.png
- Смотрим список всех шрифтов в системе:
convert -list font | grep Font