Вот некоторые вещи, чтобы вы начали:
вы можете получить г, 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
. Дельта используется для поддержания максимального индекса в 9 (вместо 10) для $importance == MAX
.
Вы хотите интерполировать между двумя цветами с учетом важности тега? – Matthew
да, точно. например. тег с значением = 0,5, наибольший_color = # 333 и smallest_color = # 555 будет иметь цвет # 444. – Alex