2012-02-08 71 views
6

我面臨這種情況,我有一個來自數據庫的ID(所以它可以是1,100,1000,...),我需要生成隨機顏色,但是應該得到相同的ID在相同的顏色。PHP生成RGB

有關如何實現此目的的任何建議?

謝謝!

+0

到目前爲止,您是否有任何代碼(或僞代碼)? – summea 2012-02-08 00:12:15

+0

什麼是位分裂? Bit0-> Bit7-> R,Bit1-> Bit7-> G,Bit2-> Bit7,Bit3-> Bit6,雖然這很複雜,但它給出了非常不同的顏色,只要ID空間不是太大。 – 2012-02-08 00:14:33

回答

25

使用密碼散列和剪輯的字節你不需要:

function getColor($num) { 
    $hash = md5('color' . $num); // modify 'color' to get a different palette 
    return array(
     hexdec(substr($hash, 0, 2)), // r 
     hexdec(substr($hash, 2, 2)), // g 
     hexdec(substr($hash, 4, 2))); //b 
} 

所得的(code to generate it)看起來像這樣的數字0-20:

demo output

1

顯而易見的方法是將ID轉換爲顏色(例如,低8位是藍色,接下來的8位是綠色,接下來的8位是紅色 - 留下8位,但我相信你可以弄清楚;-)

假設這不起作用(因爲你結束了一個可怕的調色板: 使用數組(或哈希表),使ID的映射顏色

如果你關注如果ID太多,那麼你可以將一些散列應用到ID上,並在你輸入「id to color」映射時使用它,在這種情況下,你有效地說一個id總是有一種顏色,但是一種顏色可以是由許多ID使用。

1
<?php 
// someting like this? 
$randomString = md5($your_id_here); // like "d73a6ef90dc6a ..." 
$r = substr($randomString,0,2); //1. and 2. 
$g = substr($randomString,2,2); //3. and 4. 
$b = substr($randomString,4,2); //5. and 6. 
?> 
<style> 
#topbar { border-bottom:4px solid #<?php echo $r.$g.$b; ?>; } 
</style> 
0

如果數組總是排序,那麼可以使用這個多達250個項目:

<?php 
function getRGBColorString($array) 
{ 
    $indexColor = round(250/count($array)); 
    $iterator = 1; 

    $arrayOfRGB = array(); 

    foreach($array as $item) 
    { 
     $arrayOfRGB[] = "rgb(" . ($indexColor * $iterator) . ", 113, 113)"; 
     $iterator++; 
    } 

    return $arrayOfRGB; 
} 

?>