Мне нужно создать красную, зеленую и фиолетовую (и, если возможно, желтую) версии следующего изображения:
Исходное изображение здесь: https://github.com/jsx97/test/blob/main/folder.png
Для этого я использую
magick input.png -colorspace gray -fill red -tint 100 output-red.png
magick input.png -colorspace gray -fill green -tint 100 output-green.png
etc.
Не знаю почему, но красная папка слишком яркая. Например, здесь вы можете увидеть тень:
Но на красном изображении вы этого не увидите:
Как я могу создать такие версии красного, зеленого и т. д. с более сбалансированными цветами? Может быть, нам нужно сначала перейти на Lab или LCH?
Похоже, это ошибка в пакете, который вы используете (или в том, как вы его используете). Яркость не сохраняется, когда вы тонируете вещь в красный цвет на 100%. Я получаю L~100 в самой темной части голубой папки RGB {0,127,200} и L~154 в самой темной части красной папки {255,52,52}. Попробуйте оттенить 90 и посмотрите, что будет потом. Немного странно, что голубой цвет имеет примерно в 2 раза большую яркость изображения. Я ожидаю, что желтый будет ближе к правильному (но я могу ошибаться). Используйте подходящий инструмент обработки изображений: монохромное, затем разделите его на RGB и при необходимости повторно объедините.





Возможно, это не совсем то, что вы ищете, но вы можете сделать разумный сдвиг оттенка с помощью операции ImageMagick «-modulate». Эта команда создаст 6 выходных изображений, показывающих 6 цветов, равномерно разделенных по шкале оттенков. (Я добавил их к одному изображению и изменил их размер для этого примера.)
magick folder.png -duplicate 5 -modulate 100,100,%[fx:t*200/n] +append -resize 25% result.png
При этом используется выражение FX для равномерного расчета сдвига оттенка по всему диапазону и создается такой результат...
Я добавил примерно 1/12 к сдвигу оттенка, добавив 16 к расчету «-modulate», чтобы получить немного другой набор цветов. Экспериментируйте, пока не найдете какое-то изменение, которое подойдет для вашей цели.
magick folder.png -duplicate 5 -modulate 100,100,%[fx:t*200/n+16] +append -resize 25% result2.png
Чтобы изменить одно изображение, просто задайте третий аргумент для «-модуляции» любого числа от 0 до 200. Эта команда...
magick folder.png -modulate 100,100,16 result3.png
Делает этот образ...
😎 Крутая техника с выражением -duplicate и -fx.
Привет, ДжиМак. Я попробовал это с ImageMagick 7.1.1-32 и Zsh 5.9 на macOS, и выдает ошибку: no matches found: 100,100,%[fx:t*200/n]. В чем может быть проблема?
А не могли бы вы объяснить, что там означает 200?
Возможно, ваша ОС требует двойных кавычек вокруг выражения FX «100,100,%[fx:t*200/n]». Третий аргумент операции модуляции сдвигает оттенок в диапазоне (по кругу) от 0 до 200; 100 — без изменений, а 0 или 200 — противоположный цвет. Выражение FX принимает номер изображения в списке «t», умноженный на количество приращений 200, разделенный на количество изображений в списке «n».
Я не вижу, что не так с вашим результатом. Но вы можете попробовать мой сценарий Imagemagick для замены цвета на http://www.fmwconcepts.com/imagemagick/replacecolor/index.php для систем Unix Linux/Mac OSX/Windows 10/11.
Например
Вход:
replacecolor -i blue -o red -f 50 -g 100 img.png x.png
Однако это не сильно отличается от результата вашей более простой команды.
Подобно ответу Марка Сетчелла, вы можете преобразовать в оттенки серого, а затем использовать +level-colors.
magick img.png -colorspace gray +level-colors white,red x.png
Однако это делает затенение ярким вместо темного. Так что это может быть не очень хороший метод. Так что метод Марка лучше.
Привет, Фред. Я не совсем понимаю, почему Марк удалил свой ответ (возможно, он собирается это исправить), но это было magick folder.png -colorspace HSL -separate -delete 0,1 -fill red -colorize 100% result.png. Проблема в том, что по неизвестной причине при использовании Zsh (5.9) или Bash (3.2, который предустановлен в macOS) выдается всего два красных квадрата: result-0.png и result-1.png. Марк сказал, что это странно, и что у него нет клея. Может быть, ты знаешь?
@ jsx97 jsx97 Я получаю тот же результат, что и вы, на своем Mac OSX Ventura. Проблема в том, что IM 7 обрабатывает изображения с альфа-каналом, отличным от IM 6. Поэтому правильный способ выполнить его команду на IM 7 будет следующим: magick img.png \( +clone -alpha extract -write mpr:alpha +delete \) -alpha off -colorspace HSL -separate -delete 0,1 -fill red -colorize 100% mpr:alpha -alpha off -compose copy_opacity -composite result.png
Продолжение: Но это просто создает постоянный цвет, чего я и ожидал от этой команды и от него тоже. Именно это и делает -colorize 100. Итак, Марк, вероятно, осознал обе проблемы и удалил свой пост.
Возможно, это то, что он пытался сделать: magick img.png \( +clone -alpha extract -write mpr:alpha +delete \) -alpha off -colorspace HSL -separate -delete 0,1 \( +clone -fill red -colorize 100% \) -colorspace sRGB -compose multiply -composite -compose over mpr:alpha -alpha off -compose copy_opacity -composite result.png
Другой подход в Imagemagick — использовать -compose colorize. При этом оттенок синего изображения меняется на оттенок красного изображения.
magick img.png \( +clone -fill red -colorize 100 \) -compose colorize -composite x.png
Команда Марка Сетчелла дает мне два постоянных красных изображения. Похоже, проблема в том, что ImageMagick 7 обрабатывает альфа-каналы иначе, чем ImageMagick 6, плюс тот факт, что -colorize 100 просто дает постоянный цветной результат. Так что, возможно, именно это он и пытался сделать.
magick img.png \
\( +clone -alpha extract -write mpr:alpha +delete \) \
-alpha off -colorspace HSL -separate -delete 0,1 \
\( +clone -fill red -colorize 100% \) -colorspace sRGB \
-compose multiply -composite -compose over \
mpr:alpha -alpha off -compose copy_opacity -composite result.png
Или используйте -compose softlight вместо multiply:
magick img.png \
\( +clone -alpha extract -write mpr:alpha +delete \) \
-alpha off -colorspace HSL -separate -delete 0,1 \
\( +clone -fill red -colorize 100% \) -colorspace sRGB \
-compose softlight -composite -compose over \
mpr:alpha -alpha off -compose copy_opacity -composite result.png
Или используйте -compose overlay:
magick img.png \
\( +clone -alpha extract -write mpr:alpha +delete \) \
-alpha off -colorspace HSL -separate -delete 0,1 \
\( +clone -fill red -colorize 100% \) -colorspace sRGB \
-compose overlay -composite -compose over \
mpr:alpha -alpha off -compose copy_opacity -composite result.png
Или -compose pegtoplight:
magick img.png \
\( +clone -alpha extract -write mpr:alpha +delete \) \
-alpha off -colorspace HSL -separate -delete 0,1 \
\( +clone -fill red -colorize 100% \) -colorspace sRGB \
-compose pegtoplight -composite -compose over \
mpr:alpha -alpha off -compose copy_opacity -composite result.png
этот вопрос может лучше подойти для superuser.com/questions/tagged/imagemagick. речь идет не о программировании или разработке программного обеспечения, а о художественном использовании программы.