我正在尝试创建一个标签云,需要帮助创建一个可以计算应用于每个标记链接所需颜色的函数。
我有3个变量:
答案 0 :(得分:3)
这里有一些让你入门的东西:
您可以通过以下方式获取r,g,b值:
$color1 = 0xfff000;
$r1 = ($color1 >> 16) & 0xff;
$g1 = ($color1 >> 8) & 0xff;
$b1 = $color1 & 0xff;
在两个值之间进行插值:
define('MIN', 0.10);
define('MAX', 1.00);
define('RANGE', MAX - MIN);
$i = 0.10; // importance
$i = ($i - MIN) / RANGE;
$r = $r1 + ($r2 - $r1) * $i;
$g = $g1 + ($g2 - $g1) * $i;
$b = $b1 + ($b2 - $b1) * $i;
然后你可以把它们放回去:
$color = ($r << 16) | ($g << 8) | $b;
但RGB并不一定是最适合使用的色彩空间。使用像HSL这样的东西可能会得到更好的结果。
除此之外,您可以手动创建10种颜色,并将它们放入数组中:
$colors = array('#000000', '#100000', ... );
$color = $colors[intval(($importance - 0.10) / 0.0901)];
0.0901号码只是(MAX - MIN) / 10 + smallDelta
。 delta用于将$importance == MAX
时的最大索引保持为9(而不是10)。