zaLinux.ru

Модификация изображений в командной строке Linux


ImageMagick — это мощнейшая программа и библиотека по созданию и модификации изображений в командной строке. В этом разделе будут рассмотрены команды и опции, которыми можно имитировать рисунок красками, карандашом, углём, сделать изображение чёрно-белым; повернуть изображение на произвольный угол или отобразить изображение по горизонтали или вертикали; изменить размер изображения; добавить или уменьшить шум на изображении; добавить рамку на изображение; имитировать 3D; добавить текст с произвольным стилем и форматированием; наложить одно изображение на другое; применить другие популярные фильтры.

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

Утилита magick является частью пакета ImageMagick. Подробности по установке ImageMagick, в том числе какие зависимости необходимо установить для поддержки максимального количества форматов, а также описание структуры команды, примеры использования и всех опций смотрите в статье: Руководство по ImageMagick: установка, использование и решение проблем.

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

Следующее изображение будет взято в качестве исходного:

Комбинирование опций и действий ImageMagick

Одной командой ImageMagick (magick) можно выполнить сразу несколько действий. Причём если вы используете форматы вроде jpg, то есть те, которые сжимают изображения с потерей качества (lossy), то старайтесь сократить количество операций (количество раз сжатия JPG) и делать все действия за один раз (либо в качестве промежуточных форматов используйте форматы, сохраняющие изображения без потерь данных (lossless), например, PNG).

Большинство из рассмотренных далее опций можно комбинировать друг с другом, а также с уже знакомыми опциями -scale ПИКСЕЛИ и -quality КАЧЕСТВО.

Например:

magick IMAGE.jpg -scale 200 -paint 1 test.jpg

Также уже рассмотренную конвертацию изображений вы можете комбинировать с любыми опциями. То есть за одну команду вы можете модифицировать изображения и конвертировать его в другой формат:

magick IMAGE.jpg -scale 200 -paint 1 test.png

Как извлечь область изображения (кадрирование картинки)

Чтобы извлечь область изображения используйте опцию -extract ШИРИНАxВЫСОТА+x0+y0

В этой строке:

  • ШИРИНА — ширина извлекаемой области
  • ВЫСОТА — высота извлекаемой области
  • x0 — x координата верхнего левого угла извлекаемой области
  • y0 — y координата верхнего левого угла извлекаемой области

Опция -extract должна идти перед изображением из которого извлекается область!

После использования данной опции (после имени файла, из которого извлекается область), укажите опцию +repage, которая отменит действие этой опции, иначе она будет применена ко всем изображениям, обрабатываемым в данной команде.

В следующей команде из файла IMAGE.jpg извлекается область размером 500×400 пикселей, которая располагается на расстоянии 300 пикселей от левого края и 150 пикселей от верхнего края, полученное новое изображение сохраняется в файл test21.jpg:

magick -extract 500x400+300+150 IMAGE.jpg +repage test21.jpg

Вместо опции -extract ШИРИНАxВЫСОТА+x0+y0 можно использовать формат:

ФАЙЛ[ШИРИНАxВЫСОТА+x0+y0]

Следующая команда идентична предыдущей:

magick 'IMAGE.jpg[500x400+300+150]' +repage test21.jpg

При обработке большого количества фотографий для экономии ресурсов компьютера (в первую очередь оперативной памяти) используйте Обрезку изображения во время чтения.

Как применить эффект к области изображения

По умолчанию показанные далее опции изменяют изображение целиком. Если вы хотите изменить только определённую область изображения, то используйте опцию -region ШИРИНАxВЫСОТА+x0+y0


В этой строке:

  • ШИРИНА — ширина модифицируемой области
  • ВЫСОТА — высота модифицируемой области
  • x0 — x координата верхнего левого угла модифицируемой области
  • y0 — y координата верхнего левого угла модифицируемой области

К примеру, в следующей команде эффект -negate (описание данной опции смотрите ниже) будет применён только к области изображения IMAGE.jpg размером 500×400 пикселей, которая располагается на расстоянии 300 пикселей от левого края и 150 пикселей от верхнего края, полученное новое изображение сохраняется в файл test21.jpg:

magick IMAGE.jpg -region 500x400+300+150 -negate test21.jpg


Как имитировать картину маслом

Чтобы фотография стала похожа на нарисованную красками картину используйте опцию -paint РАДИУС.

Эта опция создаёт имитацию картины маслом.

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

Пример команды:

magick IMAGE.jpg -paint 4 test1.jpg

Результат:

Как имитировать рисунок углем

Чтобы фотография выглядела будто бы нарисована углём, используйте опцию -charcoal РАДИУС.

Пример команды:


magick IMAGE.jpg -charcoal 5 test2.jpg

Результат:

Как имитировать карандашный набросок

Опция -sketch ГЕОМЕТРИЯ создаёт имитацию карандашного наброска.

Пример команды:

magick IMAGE.jpg -sketch 5 test3.jpg

Результат:

У данной опции возможны следующие варианты синтаксиса:

  • -sketch radius
  • -sketch radius{xsigma}+angle

Последний вариант опции создаёт эскиз с заданным радиусом, стандартным отклонением (сигма) и углом. Указанный угол — это угол, под которым нарисовано изображение. Это то направление, с которого люди считают, что объект исходит.

Как сделать изображение чёрно-белым

Как конвертировать изображение в чёрно-белое в командной строке Linux? С помощью опции -monochrome вы можете преобразовать изображение в чёрно-белое.

Пример команды:

magick IMAGE.jpg -monochrome test4.jpg

Результат:

Создание негатива изображения

С помощью опции -negate вы можете заменить каждый пиксель его дополнительным цветом.

Красная, зелёная и синяя интенсивность изображения инвертируются. Белый становится чёрным, жёлтый становится синим и т. д. Используйте +negate, чтобы инвертировать только пиксели изображения в градациях серого.

Пример команды:

magick IMAGE.jpg -negate test5.jpg

Результат:

Как сделать зеркальное изображение (по горизонтали или вертикали) в командной строке Linux

Чтобы отразить изображение по горизонтали или вертикали, используйте опции:

  • -flip (изображение будет отражено, перевёрнуто сверху вниз)
  • -flop (изображение будет отражено, перевёрнуто слева направо — в точности как в зеркале)

Пример команды:

magick IMAGE.jpg -flip test6.jpg

Результат:


Пример команды:

magick IMAGE.jpg -flop test7.jpg

Результат:

Как повернуть изображение в командной строке Linux

Для поворота изображения используйте опцию -rotate ГРАДУСЫ. В качестве градусов может быть установлена как положительная (для поворота по часовой стрелке), так и отрицательная (для поворота против часовойо стрелки) величина. Например:

magick IMAGE.jpg -rotate 30 test8.jpg
magick IMAGE.jpg -rotate -30 test8.jpg

По умолчанию появившиеся пустые углы будут залиты белым цветом, если вы хотите изменить цвет, то используйте опцию -background:


magick IMAGE.jpg -background VioletRed -rotate 30 test8.jpg

Имена всех цветов вы можете посмотреть с помощью следующей команды:

magick -list color

Смотрите также:

Если вы хотите повернуть изображение и заполнить пустые углы растянутыми полосками с цветом по краям картинки, то используйте опцию -distort ScaleRotateTranslate УГОЛ, например:

magick IMAGE.jpg -distort ScaleRotateTranslate 30 test9.jpg

Если вы хотите вместо заполнения пустых краёв сделать так, чтобы изображение было увеличено для заполнения всего пространства, то используйте опцию -distort ScaleRotateTranslate МАСШТАБ,УГОЛ, например:

magick IMAGE.jpg -distort ScaleRotateTranslate 1.5,30 test10.jpg

Опция -distort ScaleRotateTranslate может принимать разное количество аргументов, которые меняют и её поведение:

magick IMAGE.jpg -distort ScaleRotateTranslate 500,500,30 test10.jpg

Подробности смотрите в справке по опции -distorthttps://imagemagick.org/script/command-line-options.php#distort

Ещё две опции, имеющие отношение к повороту и отражению изображений:

  • -transpose: отразит изображение по диагонали от левого верхнего угла к правому нижнему. Эта опция математически транспонирует массив пикселей. Она эквивалентна последовательности опций -flip -rotate 90.
  • -transverse: зеркально отображает изображение по диагонали изображения внизу слева на вверх справа. Эквивалентно операциям -flop -rotate 90.

Примеры использования:

magick IMAGE.jpg -transpose test11.jpg
magick IMAGE.jpg -transverse test11.jpg

Прокручивание изображений. Эффект киноплёнки

Опция -roll ГЕОМЕТРИЯ проворачивает изображение по вертикали или горизонтали так, что его части оказываются на противоположной стороне. В качестве аргумента опции -roll нужно указать два числа, которые могут быть как положительные, так и отрицательные, которые показывают количество пикселей на которое нужно провернуть изображение по вертикали и горизонтали.

Пример команды:

magick IMAGE.jpg -roll +130+150 test11.jpg

Результат:

Как имитировать фото Polaroid в командной строке

С помощью опции -polaroid УГОЛ можно имитировать фото Polaroid.

Угол показывает, на сколько изображение должно быть повёрнуто.

Пример команды:

magick IMAGE.jpg -polaroid -10 test12.jpg

Результат:

Как уменьшить шумность картинки в командной строке Linux

Опция -noise ГЕОМЕТРИЯ в последних версиях ImageMagick не работает, поскольку объявлена устаревшей. Вместо неё используйте сочетание -statistic NonPeak ИНТЕНСИВНОСТЬ.

Например:

magick IMAGE.jpg -statistic NonPeak 3 test13.jpg

Слишком большие значения ИНТЕНСИВНОСТИ делают изображение нереалистичным.

Как увеличить шумность картинки в командной строке Linux

Для увеличения шумности используйте следующий набор опций: -attenuate ИНТЕНСИВНОСТЬ +noise ТИП

В качестве ИНТЕНСИВНОСТИ укажите число (по умолчанию 1.0). В качестве ТИПА шума выберите из следующих вариантов:

  • Gaussian
  • Impulse
  • Laplacian
  • Multiplicative
  • Poisson
  • Random
  • Uniform

Обратите внимание, что Random заменит изображение шумом, а не добавит шум к изображению. Используйте Uniform, если хотите добавить к изображению случайный шум.

Пример команды:

magick IMAGE.jpg -attenuate 1.5 +noise Gaussian test14.jpg

Результат:

Такого же результата вы можете достичь с помощью опции -evaluate, например:

magick IMAGE.jpg -evaluate Gaussian-noise 1.5 test14.jpg

Подробное описание опции -evaluate и её возможные аргументы: https://imagemagick.org/script/command-line-options.php#evaluate

Как осветлить или затемнить края изображения

Опция -raise ЗНАЧЕНИЕ осветлит или затемнит края изображения для создания 3D-эффекта.

Это создаст эффект 3D. Используйте -raise для создания эффекта приподнятости, в противном случае используйте +raise.

magick IMAGE.jpg -raise 50 test22.jpg
magick IMAGE.jpg +raise 50 test22.jpg

В отличие от аналогичной опции -frame (рассмотрена далее), -raise не изменяет размеры изображения.

Как создать рамку вокруг изображения

Чтобы поместить изображение в рамку используйте опцию -frame.

Если вы хотите однотонную рамку без эффектов, то укажите после -frame одно число:

magick IMAGE.jpg -mattecolor peru -frame 19 test23.jpg

Если вы хотите рамку с эффектом объёма, то укажите четыре числа: -frame AxA+B+C:

magick IMAGE.jpg -mattecolor peru -frame 19x19+3+6 test23.jpg

Первые два числа (A) определяют толщину рамки, второе число (B) определяет толщину внешнего края, последнее число (C) определяет толщину внутреннего края.

Опция -mattecolor устанавливает цвет рамки.

Имена всех цветов вы можете посмотреть с помощью следующей команды:

magick -list color

Смотрите также:

Как создать виньетку

Опция -vignette смягчает края изображения в стиле виньетки.

Формат: -vignette РАДИУС{xСИГМА}{+-}x{+-}y{%}

Спад эффекта виньетки контролируется РАДИУСxСИГМА (здесь две переменных radius и sigma, а также знак умножения, то есть radius x sigma). Для номинального спада это будет установлено на 0xsigma (то есть 0 x sigma). Значение 0x0 создаст круг/эллипс без спада. Аргументы x и y управляют размером круга. Большие значения уменьшают радиусы, а меньшие значения увеличивают радиусы. Значения +0+0 будут генерировать круг/эллипс того же размера, что и изображение. Значения по умолчанию для x и y составляют 10% от соответствующего размера изображения. Таким образом, радиусы будут уменьшены на 10 %, т. е. диаметры круга/эллипса будут составлять 80 % от соответствующего размера изображения. Обратите внимание, что символ процента в геометрии влияет на x и y, тогда как радиус и сигма являются абсолютными значениями (например, -vignette "0x2+10%+10%").

Примеры команды:

magick IMAGE.jpg -vignette 20x100 test24.jpg
magick IMAGE.jpg -vignette 0x100 test24.jpg

Результат последней команды:

Множество примеров как сделать разнообразные рамки и обрамления изображений вы найдёте по ссылке: https://imagemagick.org/Usage/thumbnails/

Как сделать изображение светлее. Как увеличить экспозицию

Для увеличения количества белого используйте опцию -sigmoidal-contrast ЧИСЛО,0%. Чем больше ЧИСЛО, тем сильнее будет изменение, например:

magick IMAGE.jpg -sigmoidal-contrast 4,0% test25.jpg

Для уменьшения количества чёрного используйте опцию +sigmoidal-contrast ЧИСЛО,100%. Чем больше ЧИСЛО, тем сильнее будет изменение, например:

magick IMAGE.jpg +sigmoidal-contrast 4,100% test25.jpg

Как сделать изображение темнее. Как уменьшить экспозицию

Для уменьшения количества белого используйте опцию +sigmoidal-contrast ЧИСЛО,0%. Чем больше ЧИСЛО, тем сильнее будет изменение, например:

magick IMAGE.jpg +sigmoidal-contrast 4,0% test26.jpg

Для увеличения количества чёрного используйте опцию -sigmoidal-contrast ЧИСЛО,100%. Чем больше ЧИСЛО, тем сильнее будет изменение, например:

magick IMAGE.jpg -sigmoidal-contrast 4,100% test26.jpg


Рекомендуемые статьи:

Оставить комментарий

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