在
PHP中,我试图计算出不同的十六进制颜色之间的平均颜色(十六进制).但是,我还需要提供0.0到1.0之间的索引号.
所以例如:
我有
$color1 = "#ffffff" $color2 = "#0066CC"
如果我要写一个函数来获得平均颜色,我将提供0.0作为索引号,该函数需要返回“#ffffff”.如果我提供1.0作为索引号,则该函数需要返回“#0066CC”.但是如果我提供0.2,这个函数需要返回两种颜色之间的平均颜色,但是比$color2更接近$color1.如果我提供的索引号为0.5,我会得到两种颜色的确切的平均颜色.
我一直在试图完成这几天,但我似乎无法弄清楚!任何帮助将会非常感激!
我们假设为了讨论的目的,每个颜色都有一个“值”.那么,你想要的就足够简单:
$index = 0.2; $val1 = get_value_of_color($color1); $val2 = get_value_of_color($color2); $newval = $val1 * $index + $val2 * (1 - $index); $newcolor = get_color_from_value($newval);
所以,很难找出每种颜色的“价值”.
您可以使用简单的RGB值,其中每个颜色的“值”是一组三个整数:
function get_value_of_color($color) { // assume $color is in the form #xxxxxx return array( hexdec(substr($color,1,2)),hexdec(substr($color,3,5,); } function get_color_from_value($value) { return sprintf('#%02x%02x%02x',$value[0],$value[1],$value[2]); }
这里需要在每个阵列元素上进行乘法和加法.我认为在这一点上,应该很容易使一个简单的使用功能来混合自己的颜色.
如果这不是您需要的,那么您可以使用HSL值或其他更适合您的应用程序的指标.这个想法会保持不变.