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
Подробности смотрите в справке по опции -distort: https://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
Связанные статьи:
- Руководство по ImageMagick: установка, использование и решение проблем (100%)
- Ошибки при использовании magick (convert) из пакета ImageMagick и их устранение (100%)
- Конвертация изображений в любые форматы в Linux (100%)
- Как наложить одно изображение на другое в командной строке Linux (компоновка изображений) (100%)
- Как добавить текст на изображения в ImageMagick (100%)
- Как преобразовать PDF в JPG с помощью командной строки в Linux (РЕШЕНО) (RANDOM - 43.5%)