2017-01-28 7 views
0

Я хочу изменить все цвета # FF00FF на изображении до # 0000FF, сохраняя оттенки в идеале. Поэтому я решил, что должен по крайней мере заставить его менять цвета, чтобы начать с того, может ли программное обеспечение даже делать такие вещи.Imagemagick: Как RGB работает с этим программным обеспечением?

Однако его единственное изменение цвета немного белого и только с высоким Fuzz. Таким образом, очевидно, что RGB в Imagemagick не работает, как в любом другом месте, и я не могу найти ничего, чтобы объяснить, как это работает.

Кажется, что замена некоторых не совсем белого цвета.

Использование PHP я:

exec("convert ".$dir."".$file." -channel RGB -fuzz 30% -opaque rgb\(255,0,255\) -fill rgb\(0,0,255\) ".$dir."".$file); 
+2

Это кажется очень непонятным в его нынешнем виде. Вы не хотите изменять * только * эти цвета, но аналогичные тоже исправлены? Можете ли вы показать пример того, что вы хотите, и как IM не делает то, что вы хотите? –

+0

Я не знаю, почему мне не приходилось отправлять изображения при публикации об изменении изображений, однако ответ завершен, спасибо за предложение;) –

ответ

2

Я не 100% уверен, что вы имеете в виду, как вы не предоставили образец того, что делает другое программное обеспечение, но я попробовать и посмотреть, если мы может туда добраться.

Таким образом, если мы делаем начальное изображение, в том числе ваших предполагаемых оттенков пурпурного на левой и некоторых тестовых цветов справа:

convert -size 256x256 gradient:black-magenta -size 50x256 \ 
    xc:black xc:white xc:red xc:lime xc:blue +append start.png 

enter image description here

И вы хотите изменить пурпурные оттенки в синий цвет. Я бы назвал это оттенок модуляции, поэтому я хотел бы узнать угол цветового тона между синим и пурпурным цветом, поэтому я хотел бы создать 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 

enter image description here


Возможно, это не то, что вы имеете в виду? Возможно, вы имеете в виду только определенный цвет. Если да, то это становится все труднее ... но не так сложно :-)

Во-первых, извлечь оттенок, насыщенность и яркость слоев в отдельные файлы:

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 

enter image description here

Тогда мы хотим Динк с поисками вокруг пурпурного (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 

enter image description here

Теперь примените этот 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 

enter image description here

Итак, как более простой сценарий, который может Беко 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 
+0

Копия и вставка «более простого сценария» не работала , однако я написал один из следующих приведенных выше команд, и он просто работает. Серый становится немного темнее, но это не неожиданно, когда вы играете с оттенком. –

+0

Я рад, что мы добрались туда, и это работает для вас. Возможно, попробуйте изменить окончательный RGB на sRGB, чтобы узнать, помогает ли это. Удачи с вашим проектом! –