Какая утилита команда imagemagick используется для преобразования файла
Имеется ряд интерфейсов между ImageMagick и такими языками программирования, как C/C++, Perl, Java, Python. С ImageMagick создаются динамические изображения для Web страниц.
Установка
Пакет присутствует в хранилище пакетов debian.
Для установки пакета
После установки пакет готов к использованию.
Часто используемые команды
В состав пакета входят утилиты
- display - просмотр изображений, простой графический редактор
- convert - осуществление преобразований изображений
- identify - получение информации о параметрах изображения
- import - запись образа окна, выбранной области экрана в файл
- animate - просмотр группы изображений, показ слайд-шоу из файлов
- montage - создание изображения из нескольких
- mogrify - трансформация изображения или их последовательности
- composite - комбинирование, наложение изображений
Утилита display
Утилита display осуществляет просмотр и обработку изображений на всех рабочих станциях с активным X сервером.
Например она умеет осуществлять загрузку, просмотр, запись, уменьшение/увеличение размеров, вращение и трансформацию, изменение цвета, контрастности, устранение дефектов изображения, операции со слайдами.
Формат вызова программы
Утилита convert
Утилита convert осуществляет преобразование изображений в командной строке.
Например она умеет осуществлять преобразование форматов, создание анимации, манипуляции над изображениями: вращение, изменение размера, цветовой гаммы, разрешения в точках на дюйм и т.д.
Формат вызова программы
Утилита identify
Утилита identify получает информацию о параметрах изображения.
Формат вызова программы
Утилита import
Утилита import осуществляет запись образа окна, выбранной области экрана в файл.
Формат вызова программы
Утилита animate
Утилита animate осуществляет просмотр изображения или группы изображений на любом X-сервере.
Формат вызова программы
Утилита montage
Утилита montage осуществляет создание (монтаж) изображения из нескольких изображений, возможно с добавлением тени, фрейма, меток и прочего.
Формат вызова программы
Утилита mogrify
Утилита mogrify осуществляет трансформацию изображения или их последовательности (без применения скриптов).
Формат вызова программы
Утилита composite
Утилита composite осуществляет комбинирование, наложение изображений.
В этой статье описывается, как обрабатывать изображения в командной строке. Я занимаюсь этим достаточно часто, так как моя коллекция фотографий насчитывает несколько тысяч штук. Утилиты командной строки особенно полезны для веб-разработчиков или администраторов, которые часто занимаются пакетной обработкой большого количества изображений, так как разработчик может просто интегрировать их в свои скрипты. Но даже если вы занимаетесь этим от случая к случаю, утилиты командной строки помогут вам сэкономить время.
Инструменты командной строки, описываемые в этой статье, являются частью великолепного пакета ImageMagick, который доступен практически во всех дистрибутивах Linux, а также в сети (см. ресурсы). Также к функциям ImageMagick можно получить доступ с помощью C, C++, Perl, Python, Java и некоторых других языков программирования.
Как работает ImageMagick
ImageMagick служит оберткой для набора различных графических библиотек, включающего libtiff и libpng. В терминологии ImageMagick это вызываемые делегаты. Это является одной из причин, почему ImageMagick не так быстр, как мог бы быть. Он написан таким образом, что может взаимодействовать с библиотеками несколькими способами. Необходимо отместить, что все описанное в этой статье можно выполнять различными способами. Я описываю методы, которые я использовал и которые у меня работали. Это не значит, что другие утилиты в этом случае не будут работать, это всего лишь значит, что мне было удобно работать так, как это описано.
В статье специфические проблемы обсуждаются на конкретных примерах, но описанные концепции должны быть применимы и к другим подобным проблемам.
Создание миниатюр
Первое, что я делаю со своей коллекцией изображений - создаю миниатюры. Также я хотел создать уменьшенные версии изображений для размещения на сайте, так как вряд ли многие захотят открывать 2-х мегапиксельные фотографии моего сына.
Я использовал утилиту convert, которая входит в состав ImageMagick. Convert очень хороша. Помимо уменьшения размера изображений она может размывать их, конвертировать из одного формата в другой, обрезать, очищать от мусора, рисовать рамки, делать зеркальное отображение, и многое другое. Чтобы познакомиться со всеми ее возможностями и опциями командной строки, почитайте man-страницу. Многие более интересные визуальные эффекты, получаемые с помощью convert, будут описаны ниже.
Итак, допустим, что я хочу сделать миниатюру этой довольно красивой фотографии розы:
Чтобы изменить размер изображения с помощью convert, просто используйте опцию командной строки -sample. Например, мне нужна миниатюра размером 80 x 40 пикселей. Тогда команда будет выглядеть следующим образом:
Полученная миниатюра будет выглядеть так:
ImageMagick при преобразовании автоматически сохраняет соотношение сторон первоначального изображения. Это значит, что реальный размер созданной нами миниатюры составит 53 на 40 вместо 80 на 40.
Вместо пикселей размер конвертированного изображения можно указывать в процентах от исходного размера. Это может быть полезно, если вы не знаете размера исходного изображения, или если вам не столь важен точный размер картинки. Ниже приведен пример использования процентов:
Теперь мы получим такую миниатюру:
С помощью этой команды можно создать миниатюры всех изображений в директории. Так как эта статья не посвящена написанию скриптов, я просто покажу вам пример скрипта для создания миниатюр всех JPEG в текущей директории:
Листинг 1. Создание миниатюр всех JPEG в текущей директории
Этот скрипт генерирует серию миниатюр размером 25% от размера исходного изображения с именем файла, которое создается путем добавления префикса thumb- к имени файла исходного изображения.
Получение информации о файле изображения
Еще одна часто встречающаяся задача - определение размеров и получение другой информации об изображении. Многие графические библиотеки имеют прекрасные инструменты, предназначенные для этого. Например, libtiff включает утилиту tiffinfo, которая позволяет получить следующую информацию об изображениях в формате TIFF:
Листинг 2. Простой вывод tiffinfo
Это не самый исчерпывающий пример использования tiffinfo, но, как вы можете видеть, она возвращает достаточное количество информации. Похожая утилита pnginfo возвращает информацию о файлах PNG.
Листинг 3. Простой вывод pnginfo
Я не знаю, есть ли аналогичные утилиты для других графических форматов, таких как BMP, GIF и JPEG. Тем не менее, и в этом случае на помощь приходит ImageMagick с утилитой под названием identify.
Листинг 4. Простой вывод identify
Вы можете видеть, что identify выводит набор полезной информации о каждом файле, такой как размер изображения в пикселях, глубина цвета и формат изображения.
identify также имеет флаг командной строки -format, который позволяет задать вывод только нужной вам информации. Например, если вас интересует только размер изображения, вы можете использовать команду вида:
Вывод этой команды:
Здесь %w значит ширину изображения, а %h - высоту. Для получения более подробной информации о форматировании вывода identify можно узнать, прочитав man-страницу утилиты.
Вращение изображений
Другая часто встречающаяся задача - поворот изображений. Например, многие сделанные цифровой камерой фотографии требуется повернуть на 90 градусов, чтобы нормально просматривать их в портретном режиме. Моя камера не делает этого автоматически, поэтому я написал скрипт, который запускаю после копирования фотографий с камеры.
Например, это фото я сделал во время своей последней в поездки в Port Arthur в Тасмании:
Чтобы повернуть изображение, мы снова используем команду convert:
Теперь фотография выглядит так:
Заметьте, что аргумент опции -rotate - это число градусов, на которое нужно повернуть изображение по часовой стрелке. Для повора против часовой стрелки вводится число градусов со знаком минус.
Конвертирование изображений
Команда convert также используется для конвертирования файлов изображений. Под конвертированием здесь подразумевается как изменение формата фотографии, например из JPEG в PNG, так и преобразование цветной фотографии в черно-белую, сглаживание и другие подобные операции.
convert определяет форматы исходного и преобразованного изображений, основываясь на расширениях файлов. Итак, чтобы конвертировать JPEG в PNG, используйте следующую команду:
ImageMagick в настоящее время поддерживает 89 форматов изображений.
Добавление текстовых подписей к изображению
Иногда бывает нужно добавить тестовую подпись к изображению. Например, представьте, что в вашей компании используется единый шаблон для визитных карточек, и нужно подставить данные конкретного сотрудника перед отправкой карточки на печать. Другой пример - создание сертификатов для пользователей, которые проходят онлайн-курсы на вашем веб-сайте.
Давайте начнем с этого фото:
Вы можете подписать изображение с помощью следующей команды:
Это, наверное, самая сложная для понимания команда из приведенных в этой статье, поэтому она требует некоторых пояснений.
-font helvetica задает, что подпись будет сделана шрифтом Helvetica. Также возможно указать здесь подпись к файлу шрифта. В приведенном ниже примере я помечаю фото, чтобы его не использовали на других веб-сайтах без разрешения, при этом использую шрифт, который находится в нестандартном месте:
-fill white - задает белый цвет шрифта вместо стандартного черного.
-pointsize 36 задает размер шрифта в точках. В данном случа 72 точки на дюйм.
-draw 'text 10,50 ". "' - это набор команд для рисования, в данном случае - начальная позиция текста 10, 50; текст заключен в двойные кавычки. Одинарные кавычки используются в связи с тем, что если текст содержит более одного слова, он должен быть заключен в двойные кавычки. Кроме того, двойные кавычки не могут быть вложены в другие двойные кавычки.
Другие, более артистичные преобразования
convert способен также выполнять быстрые художественные преобразования. Я продемонстрирую наиболее интересные из них. О других можно прочитать на сайте ImageMagick. Для демонстрации я буду использовать следующее изображение:
Charcoal
Эффект charcoal имитирует рисование углем.
Увеличение магнитуды аргумента опции -charcoal усиливает эффект, но при этом обработка изображения требует больше времени. Ниже пример с увеличенным значением:
Если вы хотите посмотреть, как будет выглядеть максимально усиленный эффект charcoal, попробуйте:
Получаем вот это:
Сolorize
Сolorize - это процесс смешивания цвета каждого пикселя с заданным цветом. Аргумент обозначает цвет, с которым производится смешивание. Он может быть задан в виде одного значения (это значение используется для красного, зеленого и синего цветов), или в виде трех значений. Максимальное значение - 255.
Uluru теперь выглядит так:
Implode
Эффект implode моделирует втягивание центра вашего изображения в виртуальную черную дыру. Аргумент задает степень воздействия эффекта.
Uluru теперь выглядит так:
Solarize
Эффект solarizing имитирует передержанный в процессе проявки негатив. Аргумент задает интенсивность применения эффекта, который может быть задан как в абсолютном выражении, так и в процентном от максимально возможного для пикселя значения.
Теперь наше фото будет выглядеть так:
Spread
Spread перемещает пиксели изображения в случайном порядке. Аргумент задает размер области вокруг пикселя, в пределах которой выбирается его новое местоположение, то есть насколько размазанным будет изображение.
Ниже Uluru после размазывания:
Несколько команд в одном вызове ImageMagick
Вы уже могли видеть пример такой команды в разделе о текстовых подписях. В целом возможно составлять цепочки из любых команд ImageMagick, описанных в этой статье. Например, мы хотим сделать миниатюру изображения, затем размыть его. После размытия мы применим эффект рисования углем:
Хитрости и подсказки
Есть несколько моментов, о которых нужно помнить, перед тем, как вы начнете работать со своими фото. Во-первых, вы должны определиться с форматом, в котором вы собираетесь хранить изображения, чтобы не оказаться в ситуации, когда у вас будет куча фотографий в формате, который вас не будет больше устраивать.
JPEG-сжатие хорошо подходит для больших изоборажений, таких как фотографии. Однако, это сжатие происходит с потерей данных, поэтому JPEG плохо подходит для текста, который должен оставаться читаемым. Кроме того, необходимо учитывать, что потери накапливаются при каждом изменении изображения. Для цветных изображений, если вы не хотите, чтобы при каждом редактировании накапливались потери, хорошо подходит PNG.
Вы также должны помнить, что большинство манипуляций, показанных в данной статье, невозможно отменить. Например, возьмем фотографию, сделаем миниатюру, а затем увеличим ее до размера исходной фотографии. Чтобы сэкономить место, я пропускаю промежуточные шаги и привожу сразу конечный результат.
Итак, мы объединили уменьшение с увеличением:
В результате получили следующую картинку:
Достаточно трудно узнать водопад на этой фотографии.
Заключение
В этой статье мы обсудили несколько интересных вещей, которые позволяет делать ImageMagick при обработке изображений в командной строке. Описанные здесь инструменты не решат всех проблем, но позволят сэкономить время при выполнении рутинных, наиболее часто встречающихся операций.
mogrify и convert - утилиты входящие в состав imagemagick. Они используются для применения преобразований к файлам изображений. Они понимают одинаковые ключи. Команда convert требует указания выходного файла, а mogrify производит операции над самим файлом.
- mogrify - произвести действия над самим изображением
- convert - произвести действия над изображением и сохранить в другой файл
- display - вывести изображение на экран
- animate - вывести анимированное изображение на экран
Основные команды с использование convert
Ресайз всех изображений в директории
$ for a in `ls`; do echo $a && convert $a -resize <Width>x<Height> $a; done
Создаем PDF из JPEG
$ convert *.jpg -adjoin -monitor MyPDF.pdf
Создаём превью для всех картинок в каталоге
$ for file in *.jpg; do convert -scale 100 $file tn_$file ; done
Добавить текст 'Flower' на картинку
$ convert flower.jpg -font courier -fill white -pointsize 20 \
-annotate +50+50 'Flower' flower_annotate1.jpg
Разместить текст 'Flower' внизу, по центру, добавив прозрачный фон
-pointsize 20 -annotate +0+5 ' Flower ' flower_annotate2.jpg
$ convert flower.jpg -crop 128×128+50+50 flower_crop.jpg
$ convert -delay 100 -size 100×100 \
-page +0+0 flower_frame1.jpg \
-page +0+0 flower_frame2.jpg \
-page +0+0 flower_frame3.jpg \
-page +0+0 flower_frame4.jpg \
-loop 0 flower_animation.jpg
Повернуть картинку по часовой стрелке на 90 градусов
$ mogrify DSC00606.JPG -rotate '90>'
Сконвертировать ai(tiff, eps, pdf) в jpg
$ convert file.ai file.jpg
Разбить pdf на jpg файлы, при этом увеличив разрешение (по сравнению
$ convert -density 400 Next_700.pdf -scale 2000x1000 file.jpg
Собрать из jpg-файлов gif анимацию
$ convert *.jpg images.jpg
Собрать из jpg-файлов gif-анимацию с задержкой между кадрами в 1.5 секунды
Обработка изображений происходит через обращение к консольной утилите convert. Помимо преобразования изображений из одного формата в другой (например из текста pdf в картинку png) утилита может заменить графический редактор. Склейка и обрезка изображений, изменение яркости и контраста, применение фильтров - всё это умеет convert. Кроме того операции с консольной утилитой легко автоматизируются. Есть возможность создавать специальные скрипты для ImageMagic которые будут производить сложные операции с изображением.
Многие скрипты можно скачать с официального сайта.
Изменение одного из размеров..
Если операция требует двух параметров, то они часто разделяются символом x. В примере первый параметр (ширина) не задан.Поворот
Повернуть по часовой стрелке на 90 градусов:
Изменение DPI
Часто при преобразовании PDF в PNG программа сильно занижает DPI. Поэтому это значение стоит задать отдельно с помощью параметра -density.density нужно задавать до имени входного файла
Создание pdf из изображений
convert способен и выполнять обратную операцию - создание pdf из набора изображений. Каждое изображение в примере станет отдельной страницей документа Можно повернуть (или выполнить другие операции) отдельные картинки перед добавление в pdfСклейка изображений
Добавление изображений в вертикальную ленту: -append Добавление изображений в горизонтальную ленту: +appendconvert first.jpg second.jpg -append compare.jpgЭта команда повторит первое изображение (индекс 0) и поместит его Над копие можно производить отдельные операции, заключив эти операции и команду copy в скобки: Копия перед добавлением к оригиналу будет повёрнута на 180 градусов:
convert first.jpg second.jpg +append compare.jpg
0 - радиус. лучше задавать именно 0.
20 - сигма (размер ядра?). Чем больше тем сильнее будет размыто изображение.
Медианный фильтр
Регулировка уровней
Операция -level 25%,75% возьмёт 25% самых тёмных пикселей сделав их чёрными, а 25% (100 - 75) самых светлых сделает белыми [doc: Direct Level Adjustments] . При этом диапазон яркостей оставшихся пикселей будет масштабирован, чтобы растянуть их по всей шкале яркостей.Эта операция называется линейной коррекцией. Она призвана повысит контрастность изображения.Исходное изображение |
изображение после операций с гистограммой |
Оттенки теперь представлены 50% всех пикселей, остальные 50% (слева и справа) делят черные и белые пиксели. |
Преобразовать в черно-белое
convert -type grayscale my_image.jpg gray.jpg;
Обрезка по уровню:Более радикальный способ уменьшения числа цветов - оставить лишь два. Каждый пиксель яркостью меньше 50% будет черным, а яркостью больше - белым.
Разделение всех пикселей на черные и белые может быть полезна для последующей машинной обработки изображения, но для человеческого глаза чаще проще воспринимать картинку где присутствуют полутона.
Фильтры
convert source.jpg -morphology close:5 "1x5: 1,1,1,1,1" result.jpg
Обработка сфотографированного документа. Непрактичный пример.
Часто на сфотографированном документе или конспекте оказывается тень, например когда фотокамера загораживает источник света. Сделать изображение однородным относительно просто, достаточно "извлечь" из изображения только саму тень не затронув текст. Такая операция называется выравнивание освещения. Извлечь тень можно сильно сгладив изображение, так чтобы текст слился с фоном. Таким образом полученное размытое изображение будет содержать преимущественно яркость. Иногда даже удаётся таким образом удалить тени от изгибов (или сами изгибы) бумаги, если применять медианное размытие (фильтр).Пусть исходное изображение сохранено в файле source.jpg
0. Диапазон яркостей изображения может быть узким. Тогда изображение выглядит малоконтрастным. Увеличим диапазон яркостей растянув гистограмму.
0. convert source.jpg -normalize source 1.jpg
60 - радиус в пикселях, на котором будет производится размытие вокруг данного пикселя. Подбирается экспериментально. Результирующее изображение не должно содержать заметных следов записей, только тени.
Если операция занимает много времени, то добавлением ключа -monitor можно порадовать себя информацией о прогрессе.
В результате должно получится что-то похожее:
Изображение после применения медианного фильтра. Осталось только тень. |
2. Удаление тени.
Для удаление тени используем следующую формулу для яркости каждого пикселя:
Здесь считаем, что яркость пикселя изменяется от 0 до 1. Потому что так считает ImageMagic.
R - яркость пикселя в результирующем изображении. I1, I2 - яркость соответствующих пикселей на входных изображениях.
0.5 добавим чтобы сильно не потерять яркость, ведь используется вычитание которое яркость уменьшит.
В данном случае будем использовать свою операцию, поэтому зададим значение oper как Mathematics.
Далее нужно привести параметры этой операции, которая и будет задавать нашу формулу. По умолчанию в ImageMagic используется формула:
A*I1 * I2 + B * I1 + C * I2 + D.
Её можно видоизменить задавать значение коэффициентов. A, B, C, D.
Чтобы она выглядела как формула приведённая выше зададим такие значения коэффициентов:
A = 0, B = 1, C = -1, D = 0.5.
Эти параметры операции Mathematics задаются ещё одним ключём:
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg result0.jpg
3. Исправляем яркость и контраст.
Параметры подбираются тоже опытным путём.
convert -brightness-contrast 30x60 result0.jpg result1.jpg
за счёт увеличения яркости фон бумаги стал практически однородным и белым |
convert -brightness-contrast 30x60 result0.jpg result1.jpg
Наконец можно сравнить исходное изображение с полученным поместив их рядом:
Цвета немного пострадали, но зато пропала тень, делающая картинку неоднородной.
Подобные операции требуются не только для лучшего восприятия человеком но и для работы алгоритмов машинного зрения. Которым для успешной работы требуются хорошие не зашумленные изображения, без лишних деталей.
convert source1.jpg -median 45 blur.jpg
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg result0.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg
Если изображение имеет избыточно больное разрешение, то для ускорения обработки можно его уменьшить. Дополнительно можно убрать цвета.
Операцию повышения яркости и контрастности можно заменить работой с гистограммой (см. -level).
Обработка сфотографированного документа. Практичный пример.
Автор не до конца понимает как это работает, но объяснить для гуманитариев попробует :)
Фильтра Гаусса используется для размытия. Он является фильтром низких частот, т.е. обрубает высокие частоты (spatial frequency). Частоту которая служит порогом можно регулировать с помощью параметра фильтра - сигмы.
Значит можно использовать один фильтр Гаусса, который отбросит высокие частоты (условно: > x1 ) и другой фильтр Гаусса, которые отбросить частоты чуть ниже (условно: >x0).
x0 > x1.
Получатся два изображения, которые не содержат частот выше x1, а одно из них не содержит частот выше x1. Значит, вычитанием второго изображения из первого можно получить частоты лежащие в диапазоне от x0 до x1.
Это свойство и использовано в фильтре "Разница по Гауссу". Этот фильтр уберет слишком крупные детали (частоты < x0) и слишком крупные (частоты > x1).
convert source.jpg -morphology Convolve DoG:15,100,0 -negate -normalize -level 60%,91%,0.1 result.jpg
-morphology Convolve DoG:15,100,0 - применение фильтра "Разница по Гауссу" (Difference of Gaussians, IM doc).
Изображение получится инвертированным поэтому инвертируем его снова ( -negate ), повысим контрастность ( -normalize ) и, наконец, "откусим" 60% самых светлых пикселей и 9% самых тёмных, уменьшив яркость ( 0.1 ).
Фильтр Разница по Гауссу является одним из семейства фильтров, которые призваны выделять контуры. Они используются в машинном зрении, например чтобы выделить контуры номерного знака на автомобиле.
Читайте также: