2011-10-17 23 views
0

我试图用颜色实际表示的单元格值在网格上可视化数据。红色表示高,蓝色表示低。我很天真,认为PHPdechex()将帮助我通过简单地获得int的十六进制等效并将它用作background-colorCSS(我确实为小值应用了必要的零填充)。将int转换为RGB。在PHP和HTML/CSS中的可视化

但它不完全让我想要什么。有没有一种算法可以让我可视化这个正确的?红色表示高,蓝色表示低。

我当前的代码是这样的:

<?php 
    $dec = (int) $map[$y][$x]["total_score"]; 
    $hex = dechex($dec); 
    $color = ($dec <= 65535) ? (($dec) ? "00$hex" : "ffffff") : 
           (($dec <= 1048575) ? ("0$hex") : $hex); 
?> 

注意它做什么:

ff0000十进制小于ff00ff但颜色时,首先会显示红色和紫色后者。我想红色代表非常高的小数和蓝色非常低的小数。

+1

我很难理解你想要做什么,以及你尝试过什么。你能展示一些例子和代码吗? –

+0

重新更新:啊,我明白了。我认为SO上的“如何做梯度”类型问题应该有所帮助。这看起来很有希望:[有没有人有脚本来创建一个水平梯度(从左到右)使用PHP?](http://stackoverflow.com/q/1174232) –

+0

我没有得到正确的“推”链接你提出。但我不能接受评论。所以我想如果你不打算回答问题,我会接受HSL。 –

回答

0

我认为RGB在这里不是最好的颜色模型。我会用HSL - 现代浏览器支持:color: hsl(0.5, 0.5, 0.5)并轻松地转换为RGB。

HSL让我们很容易地定义颜色和颜色本身的饱和度和亮度。蓝色是240度,红色是360度,所以你所要做的就是将“低”变为240,“高”变为360,所有中等变为240-360。

0

用红色替换红色并用0xFF00FF遮盖绿色以仅保留红色和蓝色。

$color = $your_decimal_number_you_want_to_colorize; // for example $color is 0x00F777 
$color = $color << 8; // color is 0xF77700 
$color = $color + ($color & 0x00FF00); // color is 0xF77777 
$color = $color & 0xFF00FF; // color is 0xF70077 

使用上面的代码中,如果$a > $b然后$a将比$b更红。

+0

http://ideone.com/BVuv9但他没有要求... –

+0

这将转换为仅由红色和蓝色制成的颜色。而他的问题是,例如紫色的颜色比红色的大。 – fardjad

+0

是的,我忽略了0xFF00FF ... –