Imagemagick:RGB如何使用这个软件?

时间:2017-01-28 01:39:16

标签: imagemagick

我希望将图像中的所有颜色#FF00FF更改为#0000FF,同时保持阴影,理想情况下。所以我认为我应该至少让它改变颜色开始,看看软件是否能够做到这样的事情。

然而,它只是将一点颜色改为白色而只有高感光度。显而易见,Imagemagick中的RGB并不像其他任何地方那样工作,我无法找到解释其工作原理的任何内容。

它似乎用纯白色取代了一些灰白色。

使用PHP我做:

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

1 个答案:

答案 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

或许这不是你的意思?也许你只想影响特定的颜色。如果是这样,它会变得更难......但不是那么难: - )

首先,提取Hue,Saturation和Brightness图层以分隔文件:

convert start.png -colorspace HSL -separate -colorspace gray HSL-%d.png

这将使Hue成为HSL-0.png中的单通道灰度图像,HSL-1.png中的饱和度和HSL-2.png中的亮度。

现在我们想为Hue通道制作一个新的LUT(查找表),所以我们制作一个360像素长的LUT,它以1:1的比例映射,即一切都映射到正常。

convert -size 1x360 gradient: -rotate 90 greyscale.png

enter image description here

然后我们想要对洋红色(300)周围的查找进行调整并使它们变为蓝色(240)。所以我们要从280-320范围内的所有像素中减去60度(如果你将0-360度缩放到0-1范围内,则为0.16),这样就有一些容差:

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

因此,作为一个更简单的脚本,可能会变成:

#!/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