将值映射到色标

Cod*_*wer 5 php colors

我有一个值列表,应该绘制到具有特定颜色的地图.绘制地图已经完成,但我需要找出一种方法将值映射n到表示其值的颜色.

到目前为止,一个示例和我的解决方案是基于min和标准化值max,然后将它们分配给0最低和255最高的十六进制颜色.这当然限制了我自己的灰度.这是代码:

$color = ($value / $max) * 255    // (min is zero)
Run Code Online (Sandbox Code Playgroud)

但是,如果值应该从蓝色变为红色,如何做到这一点?是否有任何可以解决此问题的通用库或工具?到目前为止,我还没能找到任何一个.

Qui*_*ker 5

可能有库可以做到这一点。但是,让我们对一般原则进行简短的热身。一般来说,您有以下选择:

  1. 预定义的颜色索引,例如 $coloridx=array(0=>'#FFFFFF',1=>'#FFEE00',...);
  2. 任何算法,例如线性梯度,它基本上是所有三个 RGB 通道(R = 红色、G = 绿色、B = 蓝色)的基于迭代的适应。
  3. 两者的结合,通常将任何复杂算法的结果放入颜色索引,然后从那里开始。

如果您将算法包括在您的考虑中,您必须了解没有truefalse。这一切都取决于你想实现什么。在某些情况下,将绿色的变化呈现为n=0..10,然后在之后的所有内容中呈现红色到黑色是有意义的n>10。大写字母和乘数有助于设置重音。像这样的东西。

实现线性渐变的一种方法是:

function lineargradient($ra,$ga,$ba,$rz,$gz,$bz,$iterationnr) {
  $colorindex = array();
  for($iterationc=1; $iterationc<=$iterationnr; $iterationc++) {
     $iterationdiff = $iterationnr-$iterationc;
     $colorindex[] = '#'.
        dechex(intval((($ra*$iterationc)+($rz*$iterationdiff))/$iterationnr)).
        dechex(intval((($ga*$iterationc)+($gz*$iterationdiff))/$iterationnr)).
        dechex(intval((($ba*$iterationc)+($bz*$iterationdiff))/$iterationnr));
  }
  return $colorindex;
}

$colorindex = lineargradient(
  100, 0, 0,   // rgb of the start color
  0, 255, 255, // rgb of the end color
  256          // number of colors in your linear gradient
);

$color = $colorindex[$value];
Run Code Online (Sandbox Code Playgroud)

我更新了代码以添加 dechex,它会反馈评论。