int转换为RGB.可视化在PHP和HTML/CSS


Converting int to RGB. Visualization in PHP and HTML/CSS

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

但这并没有得到我想要的。有没有一种算法能让我把它形象化呢?红色代表高,蓝色代表低。

我的当前代码是:

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

注意它的作用:

十进制ff0000ff00ff小,但在颜色上,前者显示红色,后者显示紫色。我想让红色代表非常大的小数蓝色代表非常小的小数

我认为RGB在这里不是最好的颜色模型。我会选择HSL——由现代浏览器支持:color: hsl(0.5, 0.5, 0.5),并且很容易转换为RGB。

HSL让你可以很容易地定义颜色的饱和度和亮度,以及颜色本身。蓝色是240度,红色是360度,所以你所要做的就是将"低"映射到240度,"高"映射到360度,所有中间值映射到240-360度范围。

将红色替换为绿色,并通过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更红