计算PHP中两种颜色之间的平均颜色,使用索引号作为参考值

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值或其他更适合您的应用程序的指标.这个想法会保持不变.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...