我的图像是纯红色的,#FF0000。我的目标是将其更改为#1100FF。
几周前我就知道我们在CSS3中有着色/过滤功能。它工作得很好但是Image的最终颜色不是#1100FF。我通过Chrome工具'Awesome Color Picker'检查颜色
所以我这样做是你必须要问的。
function RGB_TO_HSV($R, $G, $B) // RGB values: 0-255, 0-255, 0-255
{ // HSV values: 0-360, 0-100, 0-100
$HSL = array();
// Convert the RGB byte-values to percentages
$R = ($R / 255);
$G = ($G / 255);
$B = ($B / 255);
$maxRGB = max($R, $G, $B);
$minRGB = min($R, $G, $B);
$chroma = $maxRGB - $minRGB;
$computedV = 100 * $maxRGB;
if ($chroma == 0)
{
$HSL['H']= "0deg";
$HSL['S']= "0%";
$HSL['V']= (3*$computedV)."%";
return $HSL;
}
$computedS = 100 * ($chroma / $maxRGB);
if ($R == $minRGB)
$h = 3 - (($G - $B) / $chroma);
elseif ($B == $minRGB)
$h = 1 - (($R - $G) / $chroma);
else // $G == $minRGB
$h = 5 - (($B - $R) / $chroma);
$computedH = 60 * $h;
$HSL['H'] = $computedH."deg";
$HSL['S'] = $computedS."%";
$HSL['V'] = $computedV."%";
return $HSL;
}
然后在CSS中,我这样做:
img {-webkit-filter: hue-rotate(<?=$HSL['H']?>) saturate(<?=$HSL['S']?>) brightness(<?=$HSL['V']?>);}
现在请告诉我如何才能达到所需的颜色?我是否需要添加或减去原始颜色(即#FF0000)以获得所需的颜色或我使用的代码不正确或什么?
输出颜色为:#0F2DFF
编辑:图像的颜色没有限制#FF0000。我可以改变它,只要我可以准确地将图像着色为任何颜色。
答案 0 :(得分:0)
它似乎是一个webkit或css错误:https://code.google.com/p/chromium/issues/detail?id=237524 或者至少它后面的mathematical transformation并不像直接移动色调那样简单。 在这个例子中很容易观察到这一点:
<div style="width: 200px; height: 100px; color:#333; background-color: hsl(100,100%,50%)">Original</div>
<div style="width: 200px; height: 100px; color:#333; background-color: hsl(200,100%,50%)">Expected</div>
<div style="width: 200px; height: 100px; color:#333; background-color: hsl(100,100%,50%); -webkit-filter: hue-rotate(100deg);">Filtered</div>
所以我认为,如果没有对webkit算法进行疯狂的逆向工程,就不可能将一种颜色精确地转换为另一种颜色。
答案 1 :(得分:0)
我同意Joram。它没有按预期工作。
我最好的朋友是CSS形状技术。我在css中制作了形状,并根据我喜欢的颜色进行着色,这是像素完美的。虽然这需要一些时间,但它比在过滤技术上浪费时间更有价值和更有效。
我厌倦了半生不熟的标准。 :(