我有一个值列表,应该绘制到具有特定颜色的地图.绘制地图已经完成,但我需要找出一种方法将值映射n到表示其值的颜色.
到目前为止,一个示例和我的解决方案是基于min和标准化值max,然后将它们分配给0最低和255最高的十六进制颜色.这当然限制了我自己的灰度.这是代码:
$color = ($value / $max) * 255 // (min is zero)
Run Code Online (Sandbox Code Playgroud)
但是,如果值应该从蓝色变为红色,如何做到这一点?是否有任何可以解决此问题的通用库或工具?到目前为止,我还没能找到任何一个.
可能有库可以做到这一点。但是,让我们对一般原则进行简短的热身。一般来说,您有以下选择:
$coloridx=array(0=>'#FFFFFF',1=>'#FFEE00',...);如果您将算法包括在您的考虑中,您必须了解没有true或false。这一切都取决于你想实现什么。在某些情况下,将绿色的变化呈现为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,它会反馈评论。
| 归档时间: |
|
| 查看次数: |
4766 次 |
| 最近记录: |