PHP Imagick API:如何将图像的色调更改为已知的十六进制值

时间:2010-09-07 00:55:38

标签: php imagemagick imagick

我创建了模板网站。如果客户选择蓝色或绿色或紫色标题,我不希望存储图像的所有不同颜色变化。我想以编程方式更改色调。我不想'填充'它,因为这会删除任何纹理或斜面。

例如,您看到我完成了我想要的内容。 http://sta.oursitesbetter.com/test/index.php

我使用Imagick modulateImage函数完成了这项工作。

但是,我只是抛出随机的“Hue”值而不是RGB值。我想完成同样的事情来提供RGB值。我需要一个类似于modulateImage的函数,但它必须将RGB作为值并将图像设置为该色调。

我已经研究过去5个小时,但无法弄清楚如何去做。我需要帮助。

StackOverflow的任何大师都有这个颜色窘境的PHP Imagick解决方案吗?

2 个答案:

答案 0 :(得分:1)

来自Wikipedia: Hue #Computing hue from RGB

\tan h_{Preucil\ hexagon} = \frac{\sqrt{3}\cdot (G - B)}{2\cdot R - G - B}

$hex=(sqrt(3)*($green-$blue)) /
       (2*($red-$green-$blue));//$red, $green and $blue are each a value in the range 0->255


$img->modulateImage(100, 100, intval($hex*100/256));
//probably 256->100 value above will work, if didn't , try with the following insead.
//$img->modulateImage(100, 100, $hex);

答案 1 :(得分:0)

另一种选择可能是使用ImageMagick以您想要的RGB颜色创建单个像素图像,然后在HSL颜色空间中查看ImageMagick的内容。假设你的RGB值是25,126,200,你可以这样做:

convert -size 1x1! xc:rgb\(25,126,200\) -colorspace HSL txt:-
# ImageMagick pixel enumeration: 1,1,65535,hsl
0,0: (57.0474%,77.7783%,44.1184%)  #920AC71C70F1  hsl(57.0474%,77.7783%,44.1184%)

以下等效方法可能更简洁:

convert xc:rgb\(25,126,200\) -format "%[fx:100*p{0,0}.hue]" info:
57.0476

convert xc:rgb\(25,126,200\) -format "%[fx:100*hue]" info:
57.0476

因此,IM的色调为57.0474%。当然你不需要运行它并解析文本输出,我只是这样做来演示这个概念 - 你可以直接在PHP中访问像素。