Пакетная обработка изображений — одновременное автоматическое выполнение операций над множеством графических файлов.
Существует много программ способных справиться с этой задачей, но далеко не все программы обладают достаточной гибкостью.
Моим излюбленным инструментом является программа ImageMagick вкупе с языком программирования Python.
Преимущества:
Во-первых, из-за отсутствия навороченного графического интерфейса(GUI) программа потребляет меньше ресурсов. Во-вторых, это позволяет встраивать программу в собственные скрипты, что и мы и сделаем дальше.
В большинстве Linux-дистрибутивов ImageMagick установлен по умолчанию, либо имеется в стандартных репозиториях.
В Ubuntu(и других Debian-based дистрибутивах) для установки нужно выполнить в терминале команду:
sudo apt-get install imagemagick
В RedHat\Fedora:
sudo yum install imagemagick
Команд и возможностей много, поэтому опишу только те, что использую чаще всего.
identify example.png
При вызове без аргументов она выдает такой результат:
example.png PNG 1063x591 1063x591+0+0 8-bit DirectClass 114KB 0.000u 0:00.000
Вызов утилиты с опцией -verbose выдает полную информацию об изображении:
identify -verbose example.png
Image: example.png
Format: PNG (Portable Network Graphics)
Class: DirectClass
Geometry: 1063x591+0+0
Resolution: 118.11x118.11
Print size: 9.00008x5.00381
Units: PixelsPerCentimeter
Type: TrueColorAlpha
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
...
Оставшаяся часть вывода опущена
Если нужно получить какие-то конкретные параметры, то нужно использовать опцию -format, который может принимать разные атрибуты (полный список атрибутов приведен здесь — www.imagemagick.org/script/escape.php)
Так, например, если требуется узнать только размер изображения, необходимо ввести следующую команду:
identify -format "%G" example.png
Атрибут "%G" возвращает значения ширины и высоты в пикселях. Вывод будет следующим:
1063x591
Чтобы узнать только цветовую схему изображения, применяется атрибут "%r":
identify -format "%r" example.png
DirectClass sRGB Matte
Атрибуты можно комбинировать. Например для получения размеров изображения в дюймах нужно ввести такую команду:
identify -format "%[fx:w/72] на %[fx:h/72] дюймов" example.png
14.7639 на 8.20833 дюймов
convert -resize 500x400 example.png out.png
Проведем проверку результатов:
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
500x400
Чтобы пропорционально изменить размер, необходимо указывать только один из параметров. Уменьшим пропорционально ширину изображения:
convert -resize 600x example.png out.png
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
600x334
Можно задавать значения в процентах. Значения меньше 100% уменьшают размеры, больше — увеличивают:
convert -resize 50% example.png out.png
convert -resize 150% example.png out2.png
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
532x296
identify -format "%G" out2.png
1595x887
convert -colorspace GRAY example.png out.png
identify -format "%r" example.png
DirectClass sRGB Matte
identify -format "%r" out.png
DirectClass Gray Matte
В качестве параметров -colorspace можно указывать аббревиатуру любой цветовой модели: GRAY, OHTA, RGB, Transparent, XYZ, YCbCr, YIQ, YPbPr, YUV или CMYK.
Изменение контрастности изображенияДля изменения контрастности используются опции -contrast и +contrast. Первая понижает контрастность, вторая повышает. Команда будет выглядеть следующим образом:
convert +contrast example.png example.png
Команду можно записывать и таким образом
convert example.png +contrast example.png
Обязательно надо указывать исходное и конечное изображение. В примере я указал одно и то же изображение example.png, поэтому исходное изображение просто перезаписалось с новыми параметрами.
Вот тут и вступает в силу одно из преимуществ ImageMagick. Для решения этой задачи я написал скрипт на Python, который взаимодействует с ImageMagick.
Скачать скрипт и подробное руководство - https://github.com/DmitryBowie/magick_py
Несмотря на волшебное название, скрипт не творит чудеса. Скрипт лишь:
Существует много программ способных справиться с этой задачей, но далеко не все программы обладают достаточной гибкостью.
Моим излюбленным инструментом является программа ImageMagick вкупе с языком программирования Python.
Преимущества ImageMagick
ImageMagick — свободный и многоплатформенный пакет программ для неинтерактивной (пакетной) обработки графических файлов. Поддерживает множество форматов изображений и позволяет изменять их размеры, кадрировать, изменять наклон, менять цветовую схему и т.д.Преимущества:
- Бесплатность
- Многоплатформенность (Linux, Mac OS X и др. UNIX-подобные, Windows, iOS)
- Широкий набор возможностей
- CLI-интерфейс (да-да именно это одно из основных преимуществ, но есть и графическая оболочка)
- Наличие интерфейсов для различных языков программирования (Python, Php, Perl и др.)
Во-первых, из-за отсутствия навороченного графического интерфейса(GUI) программа потребляет меньше ресурсов. Во-вторых, это позволяет встраивать программу в собственные скрипты, что и мы и сделаем дальше.
Установка ImageMagick
Страница загрузки ImageMagick — www.imagemagick.org/script/binary-releases.phpВ большинстве Linux-дистрибутивов ImageMagick установлен по умолчанию, либо имеется в стандартных репозиториях.
В Ubuntu(и других Debian-based дистрибутивах) для установки нужно выполнить в терминале команду:
sudo apt-get install imagemagick
В RedHat\Fedora:
sudo yum install imagemagick
Основные команды
ImageMagick включает в себя ряд утилит командной строки для работы с изображениями — animate, compare, composite, conjure, convert, display, identify, import, mogrify, montage и stream.Команд и возможностей много, поэтому опишу только те, что использую чаще всего.
Информация об изображении
Для получения информации об изображении используется утилита identify.identify example.png
При вызове без аргументов она выдает такой результат:
example.png PNG 1063x591 1063x591+0+0 8-bit DirectClass 114KB 0.000u 0:00.000
Вызов утилиты с опцией -verbose выдает полную информацию об изображении:
identify -verbose example.png
Image: example.png
Format: PNG (Portable Network Graphics)
Class: DirectClass
Geometry: 1063x591+0+0
Resolution: 118.11x118.11
Print size: 9.00008x5.00381
Units: PixelsPerCentimeter
Type: TrueColorAlpha
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
...
Оставшаяся часть вывода опущена
Если нужно получить какие-то конкретные параметры, то нужно использовать опцию -format, который может принимать разные атрибуты (полный список атрибутов приведен здесь — www.imagemagick.org/script/escape.php)
Так, например, если требуется узнать только размер изображения, необходимо ввести следующую команду:
identify -format "%G" example.png
Атрибут "%G" возвращает значения ширины и высоты в пикселях. Вывод будет следующим:
1063x591
Чтобы узнать только цветовую схему изображения, применяется атрибут "%r":
identify -format "%r" example.png
DirectClass sRGB Matte
Атрибуты можно комбинировать. Например для получения размеров изображения в дюймах нужно ввести такую команду:
identify -format "%[fx:w/72] на %[fx:h/72] дюймов" example.png
14.7639 на 8.20833 дюймов
Изменение размера изображений
За данную функцию отвечает утилита convert. Чтобы изменить размер изображения, используется команда convert -resize ШИРИНАхВЫСОТА:convert -resize 500x400 example.png out.png
Проведем проверку результатов:
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
500x400
Чтобы пропорционально изменить размер, необходимо указывать только один из параметров. Уменьшим пропорционально ширину изображения:
convert -resize 600x example.png out.png
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
600x334
Можно задавать значения в процентах. Значения меньше 100% уменьшают размеры, больше — увеличивают:
convert -resize 50% example.png out.png
convert -resize 150% example.png out2.png
identify -format "%G" example.png
1063x591
identify -format "%G" out.png
532x296
identify -format "%G" out2.png
1595x887
Изменение цветовой схемы(модели) изображения
Для перевода изображения из одной цветовой модели в другую используется команда:convert -colorspace GRAY example.png out.png
identify -format "%r" example.png
DirectClass sRGB Matte
identify -format "%r" out.png
DirectClass Gray Matte
В качестве параметров -colorspace можно указывать аббревиатуру любой цветовой модели: GRAY, OHTA, RGB, Transparent, XYZ, YCbCr, YIQ, YPbPr, YUV или CMYK.
Изменение контрастности изображенияДля изменения контрастности используются опции -contrast и +contrast. Первая понижает контрастность, вторая повышает. Команда будет выглядеть следующим образом:
convert +contrast example.png example.png
Команду можно записывать и таким образом
convert example.png +contrast example.png
Обязательно надо указывать исходное и конечное изображение. В примере я указал одно и то же изображение example.png, поэтому исходное изображение просто перезаписалось с новыми параметрами.
Пакетная обработка изображений с разной ориентацией
Все хорошо, программа отлично справляется с пакетной обработкой изображений одной ориентации. Но что делать если в папке лежат файлы с разной ориентацией (портретной или альбомной)?Вот тут и вступает в силу одно из преимуществ ImageMagick. Для решения этой задачи я написал скрипт на Python, который взаимодействует с ImageMagick.
Скачать скрипт и подробное руководство - https://github.com/DmitryBowie/magick_py
Несмотря на волшебное название, скрипт не творит чудеса. Скрипт лишь:
- Получает имена всех изображений в папке
- Передает эти имена программе identify
- Получает обратно значение ширины и высоты изображения
- Сравнивает эти значения
- И если высота больше ширины, то скрипт просит convert пропорционально изменить высоту изображения. Если ширина больше высоты, то пропорционально изменяется ширина.
- Все остальное описано в руководстве по скрипту.
Самое замечательное, что скрипт можно адаптировать под практически любые задачи, достаточно только поменять команды, передаваемые ImageMagick.
Комментариев нет:
Отправить комментарий