2011-10-17 36 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 ... –