我正在嘗試創建一個標籤雲,並需要幫助創建一個函數,該函數可以計算應用於每個標籤鏈接所需的顏色。PHP - 基於給定變量計算顏色(十六進制)
我有3個變量:
- 個人標籤的重要性(0.1〜1)
- 最大(最重要的)標籤顏色(十六進制代碼,如 'fff000'。)
- (十六進制代碼)最小(不那麼重要)標籤顏色(十六進制代碼)
我正在嘗試創建一個標籤雲,並需要幫助創建一個函數,該函數可以計算應用於每個標籤鏈接所需的顏色。PHP - 基於給定變量計算顏色(十六進制)
我有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)。
您是否希望在給定標籤重要性的兩種顏色之間進行插值? – Matthew 2010-10-04 02:19:03
是的,確切地說。例如。具有重要性= 0.5,最大顏色=#333和最小顏色=#555的標籤將具有顏色#444。 – Alex 2010-10-04 02:40:17