Давайте предположим, что каждый цвет имеет «значение» для целей этого обсуждения. Тогда то, что вы хотите, было бы достаточно просто сделать:
$index = 0.2;
$val1 = get_value_of_color($color1);
$val2 = get_value_of_color($color2);
$newval = $val1 * $index + $val2 * (1 - $index);
$newcolor = get_color_from_value($newval);
Итак, сложная часть - выяснить, какова "ценность" каждого цвета.
Вы можете использовать простые значения RGB, где «значение» каждого цвета представляет собой набор из трех целых чисел:
function get_value_of_color($color) {
// assume $color is in the form #xxxxxx
return array(
hexdec(substr($color, 1, 2)),
hexdec(substr($color, 3, 2)),
hexdec(substr($color, 5, 2)),
);
}
function get_color_from_value($value) {
return sprintf('#%02x%02x%02x', $value[0], $value[1], $value[2]);
}
Умножения и сложения должны быть выполнены для каждого элемента массива отдельно. Я думаю, что на этом этапе должно быть легко создать простую в использовании функцию для смешивания цветов самостоятельно.
Если это не то, что вам нужно, тогда вы можете использовать значения HSL или другую метрику, которая лучше подходит вашему приложению. Идея останется прежней.