Перейти к содержимому

Imagemagick что это

  • автор:

ImageMagick

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

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

Здесь описаны лишь некоторые примеры использования утилиты. Русскую документацию по утилите convert читайте здесь.

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

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

Опция Пример Описание
-resize

-resize 500×200 Изменяем размер изображения в пикселях, с сохранением соотношения сторон
-resize 500 Сжатие до 500 пикс. по ширине, с пропорциональным сжатием высоты
-resize x500 Сжатие до 500 пикс. по высоте, с пропорциональным сжатием ширины
-resize

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

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

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

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

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

FIXME

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

-crop

-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

-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

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

-depth

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

-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

Imagemagick что это

Часто требуется не просто обработать или улучшить изображение, но применить последовательность операций к большому количеству изображений. В этом нам поможет консольный графический редактор ImageMagick.

Установка и первые шаги
Устанавливается черзвычайно просто:

apt-get install imagemagick

и всё. Но дальше меня лично ждал сюрприз: а где, собственно, программа? На самом деле этот пакет содержит несколько программ: display, animate, identify, convert, montage, mogrify и composite. Здесь я приведу свой скромный опыт работы с основной программой пакета — всемогущей convert.

С пакетом ImageMagick (во всяком случае в Дебиане) поставляется могучий мануал в PDF на 320 страницах — весьма толковое руководство, но на английском. До его завершения весьма далеко: описаны только опции командной строки, а остальное просто набросано.

Консольный графический редактор
У многих моих подоконных товарищей такое словосочетание вызывает когнитивный диссонанс: как графический редактор может быть консольным !? Может, и бывает чрезвычайно полезен, когда нужно обработать не одно, а множество изображений, лежащих к тому же в разных каталогах. Естественно, в альтернативной среде приняты наиболее топорные средства решения проблем: тыкать и выделять мышкой, и для каждого файла повторять процедуру. Самые продвинутые слышали об Action в фотошопе, но и это средство — не панацея (а кроме того, требует немалого времени на отладку комбинации действий).

Ниже — часть используемых мной команд обработки изображений, разбитых по категориям (насколько это возможно).

Операции с цветом
Имеется в виду изменение цветовых пространств: RGB/CMYK, grayscale и BW. Всё, что связано с изменением цветов.

Перевод в оттенки серого
-colorspace GRAY

Например: convert -colorspace GRAY tux.jpg tuxConvertGray.jpg

На самом деле ключ colorspace позволяет переводить изображения между разными цветовыми пространствами: GRAY, OHTA, RGB, Transparent, XYZ, YCbCr, YIQ, YPbPr, YUV или CMYK.

Перевод в чёрно-белое изображение
Здесь есть несколько методов: бинаризация по порогу (threshold), с диффузией ошибки (метод Floyd/Steinberg, error diffusion) и локальный адаптивный порог.

Бинаризация с диффузией ошибки выполняется ключом:
-dither
-monochrome
Вместе с этой опцией следует применять ключи -colors или -monochrome для определения цветового пространства, к которому применяется преобразование.

Бинаризация по порогу делается при помощи ключа:
-threshold число
где число — значение порога.

Пример: convert -threshold 128 1.png 2.png

Локальная адаптивная бинаризация по порогу производится при помощи следующего параметра:
-lat ШиринаxДлинаСмещение
Здесь имеется в виду область размером ШиринаxДлина, в пределах которой происходит порог. Смещение определяет степень отклонения значений пикселей (в процентах). Данные параметры стоит подбирать с визуальным контролем (запустить ещё и просмотрщик изображений).

Пример: convert -lat 3×3+5% tux.jpg tuxConvertedLat3x3.jpg

Постеризация
Уменьшение количества цветов на изображении:
-posterize числооттенков
до числаоттенков приводит к сокращению и «огрублению» оттенков изображения.

Инвертирование
Чтобы инвертировать изображение (цветное или полутоновое), надо указать ключ:
-negate
Действует для цветых и полутоновых изображений.

Изменение разрядности изображения
Чтобы перевести 16-битное изображение в 8-битное, нужно воспользоваться ключом:
-depth 8
Кто сказал, что в Линукс нельзя работать с 16-битным цветом?

Операции с освещённостью
Всё, что касается освещённости пикселей, без привязки к цветовому пространству: гамма-коррекция, контрастирование.

Повышение / понижение контраста
Изменение контрастности изображения достигается:
-contrast

+contrast
При этом -contrast повышает контрастность, а + понижает.

Пример: convert -contrast tux.jpg tuxConvertedContrast-50.jpg

Эквализация гистограммы
Автоматическое контрастирование изображения:
-equalize

Производит автоматическую эквализацию гистограммы — алгоритм изменяет гистограмму изображения так, чтобы она была равномерна по светам и теням.

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

Гамма-коррекция
Для гамма-коррекции изображения следует указать ключ:
-gamma значение

Значения меньшие 1.0 делают изображение темнее, значения более 1.0 осветляют изображение. Наиболее часто применяемые значения лежат в пределах от 0.8 до 2.3
Можно применять разные значения гамма-коррекции для разных цветовых каналов, например так: -gamma 1.7/2.3/1.2

Уровни
Более тонкая настройка контрастности изображения при помощи уровней:
-level точкачёрного
можно указывать как в абсоютных величинах, например -level 10,65000 так и в процентах -level 2%,98%
По умолчанию гамма стоит равная 1.0 (то есть без гамма-коррекции), но её можно задать, например, так -level 2%,98%,0.8

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

Изменить размер изображения
Можно задать точный размер в пикселях:
-resize MMMxNNN

изменить размер изображения на MMMxNNN. При этом плотность изображения сохраняется изначальной.
Можно задать в процентах:
-resize 200%
то есть увелилить в 2 раза.

Более быстрый, но грубый алгоритм маштабирования:
-scale число%
масштабирует изображение в заданном процентном соотношении.

Кадрировать изображение
Для кадрирования изображения следует использовать:
-crop ШиринаxВысотаИсходноеХ
>ИсходноеY>
Имеется в виду, что требуется вырезать область ШиринахВысота, причём область смещена на значение ИсходноеХ и ИсходноеY пикселей. Значения двух последних параметров — на самом деле просто координата левого верхнего угла области, для которой указаны данные ширины и высоты. Описание дано в терминологии GiMP: если там вызвать диалог кадрирования, то станет понятным, что имеется в виду.

Пример: convert -crop 95×85+50+12 tux.jpg tuxConvertedCrop.jpg

Изменить плотность изображения
Для того, чтобы задать количество пикселей на дюйм, следует воспользоваться ключом:
-density DPIгоризонтальноеxDPIвертикальное
-density число
Первый вариант нужен тогда, когда по вертикали и горизонтали разрешение разное. Второй вариант проще: если нужно задать разрешение, одинаковое в обоих направлениях.

Поворот изображения
Чтобы повернуть изображение, указываем:
-rotate «+-градусы»
Для того, чтобы повернуть изображение по часовой стрелке, пишем -rotate «+90» для поворота против часовой стрелки, соответственно -rotate «-90»
Если поворот производится на произвольное число градусов, то изображение поворачивается как целое, увеличиваясь для вмещения исходной картинки. Появившиеся области становятся цвета фона, который определяется параметром -fill цвет.

  • если надо заполнить цветом по-быстрому и особенно не думать, можно указать именованый цвет (yellow, black, white). Полный их перечень можно получить командой convert -list color
  • если заполнять надо точно известным цветом, можно указать его в формате #RGB (R,G,B are hex numbers, 4 bits each)
  • convert -fill blue .
    convert -fill «#ddddff» .
    convert -fill «rgb(65000,65000,65535)» .

Фильтры для улучшения изображений
Приведены алгоритмы размытия / повышения резкости и шумоподавления.

Размытие по Гауссу
Чтобы размыть изображение по Гауссу:
-blur Радиус
-blur РАДИУСxСИГМА
Размытие изображения по Гауссу на РАДИУС пикселей. Опционально можно задать степень (стандартное отклонение) — задав СИГМУ.

Радиальное размытие
Размыть изображение, «завращав» его вокруг центра, можно:
-swirl градус
на заданное количество градусов.

Удаление спекл-шума
Простой метод удаления спекл-шума (мультипликативный шум):
-despeckle
Действие приводит к лёгкому размытию.

Выделение краёв
Для выделения краёв на изображении следует использовать ключ:
-edge радиус
Приводит к появлению оконтуренного изображения (по всей видимости, применяется метод Собела).

Увеличение резкости
Для того, чтобы изображение стало более резким, можно применить ключ:
-sharpen РадиусxСигма
Используется оператор Гаусса, требуется задание радиуса и стандартного отклонения (Сигма)

Медианная фильтрация
Для удаления импульсного шума с изображения следует использовать медианную фильтрацию:
-median радиус
значение параметра задаёт область оценки шума для алгоритма.

Нечёткая маска
Для повышения резкости изображение, особенно на контурах, можно применить нечёткую маску:
-unsharp РадиусxСигма+величина+порог
Используется оператор Гаусса, которому требуется задать Радиус и Сигму (для достижения хороших результатов радиус должен быть больше сигмы). По умолчанию 0 и 1.0 соответственно.
Параметр величина есть процент разницы между оригинальным и нечётким изображением, умолчание 1.0, а порог — величина количественной разницы между изображениями (умолчание 0.05).

У некоторых пользователей возникает дескрипанс: как же так, типа Unsharp, а повышает резкость? Дело в том, что фильтр получил своё имя потому, что его действие выглядит так, как будто из изображения вычли его нерезкую копию. Никакого вычитания, конечно, не происходит: выполняется свёртка с ядром Гаусса 3х3 пикселей, но это уже другая история.

Добавление / удаление шума (по ближайшим соседям)
Шумоподавление выполняется при указании ключа:
-noise радиус
Удаление шума с изображения на основе анализа величин значений ближайших пикселей в области заданного радиуса. Пиксель считается шумовым и заменяется на среднее по области, если и только если значение пикселя является максимумом или минимумом в данной области.

Чтобы добавить шум к изображению, указываем:
+noise тип
Можно добавить шумы: Uniform (однородный), Gaussian (Гауссов), Multiplicative (спекл-шум), Impulse (импульсный), Laplacian (Лапласов шум), Poisson (шум Пуассона).

Вместо заключения
Мне давно хотелось разобраться с возможностями ImageMagick, а тут выдалось время, когда вся работа сделана, а новой ещё не нагрузили 🙂 К сожалению, фраза сейчас не актуальна :-)))

Ссылки
Мануал в формате PDF я уже упоминал, очень толковая вещь, но занудно написанная и довольно неряшливая. Начальные сведения можно найти у моего забугорного коллеги, продвинутые сведения и приёмы — у орлов из IBM. Товарищ jetxee привёл несколько примеров использования ImageMagick в скриптах. Этого должно хвтатить на первое время.

Imagemagick

Imagemagick

Imagemagick — мощный набор консольных утилит для редактирования, создания, объединения, конвертирования графических файлов в автоматическом режиме. Поддерживает огромное количество графических форматов.

Imagemagick представляет из себя несколько утилит, запускающихся из командной строки, которые могут выполнять над графическими файлами различные действия. Его еще называют консольным графическим редактором. Очень часто Imagemagick используют в скриптах для автоматизации процесса обработки изображений, а также в графических редакторах.

Imagemagick поддерживает огромное количество графических форматов (более 200). Из популярных можно отметить форматы: JPEG, PNG, BMP, GIF, TIFF, PDF, SVG.

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

  • Создание анимационных GIF файлов из группы изображений.
  • Преобразование графических форматов из одного в другой.
  • Преобразование цветовых палитр.
  • Добавление текста произвольным шрифтом и фигур на изображение.
  • Наложение изображений, одного на другое.
  • Объединение группы изображений в одно.
  • Добавление рамок.
  • Добавление эффектов (резкость, размытие, фильтрация, маскирование и другие).
  • Уменьшение или добавление шума.
  • Преобразования (поворот, изменение размера, обрезка, отражение)
  • Редактирование яркости, контраста, эквализация и другие операции с цветом.

В Imagemagick входит следующий набор утилит (состав может зависеть от версии):

  • magick
  • magick-script
  • convert
  • composite
  • compare
  • conjure
  • display
  • animate
  • identify
  • import
  • montage
  • mogrify
  • stream

Imagemagick доступен для Linux-систем, также есть сборки для MacOS, iOS, Windows.

Установка

Установка в Ubuntu (LinuxMint)

sudo apt install imagemagick

Руководство пользователя ImageMagick

Здравствуй, Хабр! Русскоязычная документация ImageMagick — для тех, у кого есть желание заглянуть под капот графическому редактору, при этом есть интерес к замечаниям Николя Робиду, комментариям Энтони Тиссена, желание разобраться, как работать с 12 методами Дафф-Портера, крутить цвета в HCL, HSL, Jzazbz, Lab, XYZ, YcbCr, применять дизеринг диффузии ошибок Римерсмы или Флойда-Штейнберга для квантования цвета…

Последнее время активно работаю с библиотеками векторной графики. Разумеется, сталкиваюсь как с экзотическими программами, так и распространенными. Так, я близко познакомился, наверное, со старейшим «графическим редактором» ImageMagick.

Я был впечатлен возможностями, даже очарован программой. Тогда же я заметил, что документация программы на русском языке недоступна. Хотя, на мой взгляд, ImageMagick предоставляет очень внятную англоязычную документацию.

Программисты на С или веб-разработчики, конечно, знают, что эта программа и библиотека встречается почти всегда, если возникает необходимость в сложной обработке векторной графики. Например, ImageMagick «встроен» как движок в Фейсбук, Инстаграм, в огромное количество форумов на PHP или Perl. ImageMagick почти всегда используется там, где необходимы вызовы API для графики, требуется поиграться с ядрами морфологии для настройки, поменять unity на diamond, а square на disk, выбрать интерполяцию типа nearest-integer, nearest-neighbour, catmull-rom или любую другую.

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

Это были статьи, например, о фильтрах конце 1980-х, когда Пол Хекберт, исследователь в области цифровой графики, создал известную программу для изменения размера изображения.

В общем, рассказывалось о Джозефе-Луи Лагранже, фильтрах «Catrom», названных в честь Эдвина Катмулла и Рафаэля Рома и прочее.

Так как почти все статьи приводились с иллюстрациями ImageMagick, я «встроил» некоторые замечания в описания функций программы. Весь текст я сверстал в fb2, получилось около 200 страниц, и выложил на coollib.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *