2010-10-04 87 views
0

我正在嘗試創建一個標籤雲,並需要幫助創建一個函數,該函數可以計算應用於每個標籤鏈接所需的顏色。PHP - 基於給定變量計算顏色(十六進制)

我有3個變量:

  • 個人標籤的重要性(0.1〜1)
  • 最大(最重要的)標籤顏色(十六進制代碼,如 'fff000'。)
  • (十六進制代碼)最小(不那麼重要)標籤顏色(十六進制代碼)
+1

您是否希望在給定標籤重要性的兩種顏色之間進行插值? – Matthew 2010-10-04 02:19:03

+0

是的,確切地說。例如。具有重要性= 0.5,最大顏色=#333和最小顏色=#555的標籤將具有顏色#444。 – Alex 2010-10-04 02:40:17

回答

3

這裏有一些東西讓你開始:

你可以得到了R,G,B值通過:

$color1 = 0xfff000; 
$r1 = ($color1 >> 16) & 0xff; 
$g1 = ($color1 >> 8) & 0xff; 
$b1 = $color1 & 0xff; 

兩個值之間的插值:

define('MIN', 0.10); 
define('MAX', 1.00); 
define('RANGE', MAX - MIN); 

$i = 0.10; // importance 

$i = ($i - MIN)/RANGE; 

$r = $r1 + ($r2 - $r1) * $i; 
$g = $g1 + ($g2 - $g1) * $i; 
$b = $b1 + ($b2 - $b1) * $i; 

然後你可以把它們放回去:

$color = ($r << 16) | ($g << 8) | $b; 

但RGB不一定最好的色彩空間來處理。通過使用HSL之類的東西,你可能會獲得更好的結果。

或者這一切,你可以簡單地創建10種顏色的手,你喜歡,並把它們放到一個數組:

$colors = array('#000000', '#100000', ...); 
$color = $colors[intval(($importance - 0.10)/0.0901)]; 

的0.0901數量簡直是(MAX - MIN)/10 + smallDelta。增量用於在$importance == MAX時保持最大索引爲9(而不是10)。

+0

謝謝,但我得到一個1到3位數字返回。我認爲這是因爲0xff的事情。 – Alex 2010-10-04 04:26:29

+1

您可以使用'$ html_color = sprintf(「#%06x」,$ color);'將整數0xff0000轉換爲HTML顏色字符串。 – Matthew 2010-10-04 05:33:32

+0

tx,這工作,但我得到錯誤的顏色。我認爲這是因爲我需要將html color1和$ color2從html顏色格式轉換爲0xff格式 – Alex 2010-10-04 12:28:21