ImageMagick

В этой статье предлагаю познакомиться с ImageMagick — замечательным инструментом для редактирования изображений. Первоначально созданный для Linux этот пакет набрал популярность и прешел на другие платформы, включая Windows и Android. При пакетной обработке, когда нужно изменить несколько тысяч изображений, у ImageMagick нет конкурентов.

Что это такое

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

convert -modulate [значение яркости] файлнавходе.jpg файлнавыходе.jpg


herbs
Оригинальное изображение
herbs1
Яркость увеличена на 30%


Чтобы добавить резкости изображению запустите:

convert-unsharp 1.5x1.2+1.0+0.10 файлнавходе.jpg файлнавыходе.jpg


flower
Оригинальное изображение
flower1
Результат работы фильтра повышения резкости
А если захотите повысить цветовую насыщенность:

convert -modulate 100,150,100 файлнавходе.jpg файлнавыходе.jpg


dragonflies
Оригинальное изображение
dragonflies1
Насыщенность поднята в 1.5 раза
ImageMagick поддерживает большинство графических форматов, так что с конвертацией проблем не должно возникнуть.
Как и весь софт, который приводится на этом сайте, ImageMagick является бесплатным, что при всей его мощности является немаловажным плюсом. Но самое главное его преимущество кроется в его консольности, то есть вы можете запускать его в пакетном режиме для обработки любого количества файлов. Имея командную строку и ImageMagick вы можете творить просто чудеса с изображениями даже при полном отсутствии графического интерфейса в системе. Выше я привел несколько примеров его работы, более подробно об этом буде сказано дальше.

Для чего нужен

Для ImageMagick можно придумать множество областей применения. Вот список, где чаще всего можно увидеть ImageMagick:

  • Для обработки большого набора фотограийЭто самый часто используемое свойство ImageMagick, которое приводят на разных сайтах в Internet. Типа у вас есть 100500 фоток и чтобы их слегка изменить (яркость добавить, резкость придать изображению, текст наложить) вот тут ImageMagick и сгодится. В принципе все это верно и ImageMagick справится с этим, но с этим справятся и другие бесплатные программы.
  • Для покадрового кодирования видеоА вот это уже интереснее. Иногда нужно обработать видео, а фильтр для обработки у вас есть для изображения, а не для видеопотока. Вот тут можно поступить следующим способом. Разложить видео на отдельные кадры. Покадрово обработать и собрать заново. Вот для покадровой обработки ImageMagick окажется весьма кстати.
  • Для систем видеонаблюдения/умный домСейчас становится популярной идея умного дома. Сделать фото и отправить на мобильный, чтобы можно было проконтролировать издали, «а как там, пока хозяин в командировке». Центральный миникомпьютер умного дома (чаще всего на нем установлен Linux) собирает фото с видеокамер, ImageMagick обрабатывает (цветокорреция, изменение размера изображение, добавление титров) и отправляет хозяину.
  • Для обработки графики на web серверахНу тут вроде бы понятно, пользователи присылают фото, ImagMagick на web сервере меняет им размер и добавляет текст, например.
  • Для написания всяческих интернет пауковДопустим вы человек ленивый и вам даже лень серфить по инету в поисках интересных картинок. Вы написали скрипт на Perl’е, который закачивает на диск фото с разных сайтов, как-то их меняет, опять же с помощью ImageMagick и отправляет вам в архиве на почту. А вы с телефона этот архив забираете и смотрите фотографии. Ну мало ли какие фотографии и с каких веб сайтов :-)Естественно, поле деятельности для ImageMagick гораздо шире, чем я тут привел. Опять же научные исследования, ведь ImageMagick первоначально разрабатывался для науки. История создания ImageMagick уходит в 1980 год, когда для компании DuPont, работавшей в области химии потребовалось рисовать на экране с 256 цветами изображения глубиной 24 бита (миллионы цветов). Так что история создания ImageMagick довольно богатая и не стоит пренебрегать возможностями этой программы, только потому что она работает из командной строки и не имеет своего GUI (Graphical User Interface -графический интерфейс).

Установка

ImageMagick можно скачать с официального сайта. Там вы найдете инсталляционный пакет для любых систем (Windows, Linux, MacOS). Так же доступны для скачивания пакеты оптимизированные для работы с глубиной изображения 8-bit и 16-bit.

Инструменты

Теперь перейдем к конкретному рассмотрению инструментов пакета ImageMagick.

animate

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

Для этого запускаем animate:

animate *.png

и смотрим видео в котором быстро проигрываются png файлы.

Точно так же можно посмотреть анимационный gif:

animate video.gif

compare

Этот инструмент позволяет сравнить два изображения. Разницу записать в третье изображение и по необходимости в текстовом виде в файл.

img1 img2 diff
изображение 1 изображение 2 разница

Помимо визуального сравнения утилита compare позволяет выразить различия между изображениями в числовом виде:

compare -verbose -metric mae img1.tiff img2.tiff difference.png
img1.tiff TIFF 128x128 128x128+0+0 8-bit TrueColor sRGB 65.9KB 0.000u 0:00.000
img2.tiff TIFF 128x128 128x128+0+0 8-bit TrueColor sRGB 65.9KB 0.000u 0:00.000
Image: img1.tiff
Channel distortion: MAE
red: 621.481 (0.00948319)
green: 304.309 (0.00464346)
blue: 612.916 (0.0093525)
alpha: 0 (0)
all: 384.676 (0.00586979)
img1.tiff=>difference.png TIFF 128x128 128x128+0+0 8-bit sRGB 43c 911B 0.010u 0:00.010

composite

Здесь наоборот, мы из двух изображений склеиваем одно:

composite -gravity center img_digits.png img2.png composite.png
img_digits img2 composite
изображение 1 изображение 2 объединение

conjure

Эта утилита является обработчиком командного языка ImgaeMagick MSL (Magick Scripting Language), который представляет из себя обычный XML файл с командами и параметрами для этих команд для обработки изображений в пакете ImageMagick. Это экзотическая команда и по неопытности туда лазить не надо.

convert

Название говорит само за себя. Эта программа конвертирует изображение из одного офрмата в другой, попутно изменяя его при помощи различных команд.

display

Программа для показа изображений.

После выполнения команды:

display ImageMagick.jpg

появляется окно с картинкой:

display

identify

Позволяет получить информацию о графическом файле.

identify -verbose img_0405.png

Например, вывод:image_info

import

Позволяет сделать screenshot экрана.

import screen.png

Изображение экрана запишется в файл screen.png

mogrify

Делает все тоже самое, что и convert, но результат работы программы записывается в тот же файл.

mogrify -resize 50% foto.jpg

montage

Склеивает несколько изображений в одно.

montage red_square.png green_square.png blue_square.png montage.png

red_square + green_square + blue_square = montage

stream

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

Кроссплатформенность

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

Что умеет

Итак, давайте подитожим, какие возможности пользователю предоставляет ImageMagick.

    • Преобразование форматов поддерживает все известные форматы и позволяет конвертировать из одного формата в другой
    • Редактирование изображений изменение размера, вращение, обрезка, отражение
    • Прозрачность можно сделать часть изображения прозрачным
    • Рисование можно рисовать и добавлять текст поверх изображения
    • Рамки и границы можно добавлять рамки и границы
    • Спецэффекты размытие, усиление резкости, изменение оттенка
    • Анимация создание анимаионных gif
    • Заметки красивый текст поверх изображения
    • Полная инфа об изображении вся необходимая информация о самом изображении
    • Композитинг накладывание изображений друг на друга с различными эффектами
    • Монтаж комбинация одного изображения из нескольких
    • Правка перспективы правка искажений в изображении
    • Морфинг изменение формы исходного изображения под воздействием предопределенного шаблона
    • Границы определение границ изображения
    • Motion picture инструмент для работы с форматами изображениями (кадрами) из киноиндустрии (например IMAX)
    • Математика возможно применение математических формул, например для описания формы кривых светокоррекции
    • Connected component labeling служит для определения однородных областей на изображении
    • Discrete Fourier transform преобразование Фурье в модификации исходного изображения
    • Perceptual hash новый способ поиска схожих изображений
    • Color management корректная работа с цветовыми профилями
    • HDR поддержка HDR изображений (с широким световым охватом)
    • Кодирование изображений по ключу если у вас есть пароль, то сможете раскодировать изображение
    • Virtual pixel метод анализа приграничных пикселов
    • Поддержка изображений больших размеров чтение/запись из/в гигапиксельных и даже терапиксельных изображений
    • Многопоточность/многоядерность позволяет использовать преимущество многопроцессорных систем
    • Distributed pixel cache алгоритм позволяющий обрабатываит изображение на нескольких компьютерах (актуально для гигапиксельных и больше изображений)
    • Heterogeneous distributed processing позволяет работать с изображением на CPU и GPU одновременно
    • ImageMagick для iPhone представьте себе есть версия для iPhone и iPad

Фильтры и опции

Imagemagick имеет большое количество встроенных фильтров и опций, бессмысленно здесь описывать их, для этого существует документация но официальном сайте. Я просто приведу здесь скриншот экрана со списком всех опций, чтобы, так сказать понять всю глубину глубин ImageMagick 🙂
imagemagick_options
Довольно внушительный список.

Заключение

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

Почитать еще