Я не 100% уверен, что вы имеете в виду, как вы не предоставили образец того, что делает другое программное обеспечение, но я попробовать и посмотреть, если мы может туда добраться.
Таким образом, если мы делаем начальное изображение, в том числе ваших предполагаемых оттенков пурпурного на левой и некоторых тестовых цветов справа:
convert -size 256x256 gradient:black-magenta -size 50x256 \
xc:black xc:white xc:red xc:lime xc:blue +append start.png
И вы хотите изменить пурпурные оттенки в синий цвет. Я бы назвал это оттенок модуляции, поэтому я хотел бы узнать угол цветового тона между синим и пурпурным цветом, поэтому я хотел бы создать 2x1 изображение с одной пурпурными и синим пикселем и получить их значения HSI:
convert xc:magenta xc:blue -append -colorspace hsi txt:
Выход
# ImageMagick pixel enumeration: 1,2,65535,hsi
0,0: (54612.5,65535,43690) #D555FFFFAAAA hsi(300,100%,66.6667%)
0,1: (43690,65535,21845) #AAAAFFFF5555 hsi(240,100%,33.3333%)
И я могу видеть, что их оттенки 60 градусов друг от друга (300-240). Поэтому я хотел бы использовать -modulate
оператор, который принимает Яркость, Насыщенность и Hue, оставьте первые два без изменений на уровне 100%, и изменить Hue на 60 градусов:
convert start.png -modulate 100,100,60 result.png
Возможно, это не то, что вы имеете в виду? Возможно, вы имеете в виду только определенный цвет. Если да, то это становится все труднее ... но не так сложно :-)
Во-первых, извлечь оттенок, насыщенность и яркость слоев в отдельные файлы:
convert start.png -colorspace HSL -separate -colorspace gray HSL-%d.png
Это даст нам Hue как один канальное изображение в оттенках серого в HSL-0.png
, Насыщенность в HSL-1.png
и Легкость в HSL-2.png
.
Теперь мы хотим создать новый LUT (Lookup Table) для канала Hue, поэтому мы создаем 360-пиксельный LUT, который отображает 1: 1, то есть все отображается в нормальном режиме.
convert -size 1x360 gradient: -rotate 90 greyscale.png
Тогда мы хотим Динк с поисками вокруг пурпурного (300) и сделать их синими (240). Таким образом, мы хотим вычесть 60 градусов (это 0,16, если масштаб 0-360 градусов на диапазон 0-1) от всех пикселей в диапазоне 280-320, так что некоторая толерантность:
convert -size 1x360 gradient: -rotate 90 -colorspace gray -fx "i<280||i>320?u:u-0.16" hueCLUT.png
Теперь примените этот LUT к Hue исходного изображения и восстановить его ...
convert HSL-0.png -colorspace gray hueCLUT.png -clut HSL-1.png HSL-2.png -set colorspace HSL -combine -colorspace RGB result.png
Итак, как более простой сценарий, который может Беко me:
#!/bin/bash
# Make a hue CLUT, transforming magenta hues to blue
convert -size 1x360 gradient: -rotate 90 -colorspace gray -fx "i<295||i>305?u:u-0.16" -resize 256x1! hueclut.png
# Apply to the hue channel
convert start.png -colorspace HSL -write MPR:HSL \
-channel R -separate hueclut.png -clut \
\(MPR:HSL -channel G -separate \) \
\(MPR:HSL -channel B -separate \) \
-set colorspace HSL -combine -colorspace RGB result.png
Это кажется очень непонятным в его нынешнем виде. Вы не хотите изменять * только * эти цвета, но аналогичные тоже исправлены? Можете ли вы показать пример того, что вы хотите, и как IM не делает то, что вы хотите? –
Я не знаю, почему мне не приходилось отправлять изображения при публикации об изменении изображений, однако ответ завершен, спасибо за предложение;) –