2011-10-28 28 views
0

我有這樣的代碼:我應該如何防止看不到的顏色?

function rand_colorCode(){ 
    $r = dechex(mt_rand(0,255)); 
    $g = dechex(mt_rand(0,255)); 
    $b = dechex(mt_rand(0,255)); 
    $rgb = $r.$g.$b; 
    if($r == $g && $g == $b){ 
    $rgb = substr($rgb,0,3); 
    } 
    return '#'.$rgb; 
} 

$code = rand_colorCode(); 

這產生後來被插入到MySQL數據庫隨機顏色。但有時它會產生太淺的顏色。 (這是一個問題,因爲這些顏色稍後顯示,我的背景顏色是白色的)

我的簡單問題是:如何防止顏色太淺或太暗?我應該如何自定義我的代碼?

+0

採取我建議你重新評估你的方法。使用限制 - 50-200而不是0,255 - 將消除可能生成的顏色中的紅色(255,0,0),綠色(0,255,0)和藍色(0,0,255)。 –

回答

0

井(例如)白是255,255,255 可以只定義一個規則,即如果所有三個值(R,G & B)高於某一treshold,顏色的RGB碼會太亮,因此無法正確顯示。嘗試通過查看顏色調色板來自定義閾值。也許200,200,200是你想要的最大值,最小值是50,50,50。

然後,您可以隨機化一個顏色從50到200(如果您將其定義爲閾值)。因此,而不是

$r = dechex(mt_rand(0,255)); 

你做

$r = dechex(mt_rand(50,200)); 

這可能是解決這個問題的簡單方法。

+0

這將排除像0,0,255; 0,255,0; 255,0,0是藍色,綠色和紅色,與黑色/白色背景無關。 –

2

使用較短的顏色範圍:

mt_rand(80,200) 

下邊界防止接近黑色的顏色,而較高的邊界防止了接近白色的顏色。您可以調整此範圍以適應您的需求。

2

可以計算出當前的一組顏色的亮度,並根據一些預定義的極限驗證它:

while (true) 
{ 
    $r = dechex(mt_rand(0,255)); 
    $g = dechex(mt_rand(0,255)); 
    $b = dechex(mt_rand(0,255)); 
    $brightness = (0.2126 * $r) + (0.7152 * $g) + (0.0722 * $b) 
    if ($brightness > $lower_limit || $brightness < $upper_limit) 
    break; 
} 

的公式就是從這裏Formula to determine brightness of RGB color

+0

+1雖然我認爲第二或第三個公式更適用 – NikiC

相關問題