PHP - рассчитать цвет (hex) на основе заданных переменных - PullRequest
0 голосов
/ 04 октября 2010

Я пытаюсь создать облако тегов, и мне нужна помощь в создании функции, которая может рассчитать цвет, необходимый для применения к каждой ссылке тега.

У меня есть 3 переменные:

  • значение индивидуальной метки (от 0,1 до 1)
  • цвет самого большого (самого важного) тега (шестнадцатеричный код, например, 'fff000')
  • (шестнадцатеричный код) наименьший (менее важный) цвет метки (шестнадцатеричный код)

1 Ответ

3 голосов
/ 04 октября 2010

Вот кое-что для начала:

Вы можете получить значения 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. Дельта используется для поддержания максимального индекса на уровне 9 (вместо 10), когда $importance == MAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...