PHP - 根据给定的变量计算颜色(十六进制)

时间:2010-10-04 01:41:15

标签: php css colors tags

我正在尝试创建一个标签云,需要帮助创建一个可以计算应用于每个标记链接所需颜色的函数。

我有3个变量:

  • 个人标签重要性(从0.1到1)
  • 最大(最重要)标签颜色(十六进制代码,例如'fff000')
  • (十六进制代码)最小(不太重要)标签颜色(十六进制代码)

1 个答案:

答案 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)。