Шестнадцатеричные цвета состоят из 6 шестнадцатеричных цифр. Первые две цифры обозначают красный оттенок, вторые две - зеленый, а последние две - синий. В пределах оттенков 00 - это отсутствие цвета, а FF - это самое высокое значение цвета. Итак, # FF0000 будет ярко-красным без зеленого или синего цвета, а # 00CCFF будет очень синим и немного зеленым без красного.
Примеры цветов, которые вы даете, на самом деле имеют различную косметику красного, зеленого и синего цветов. # 66CC00 в основном зеленый с небольшим количеством красного, а # 99FFCC в основном зеленый с небольшим количеством синего и красного.
Вы должны разбить свои цвета на их красные, зеленые и синие компоненты, прежде чем преобразовать их в десятичные, усреднить их, а затем преобразовать обратно:
# 66 CC 00 -> 102 204 0
# 99 FF CC -> 153 255 204
Среднее между двумя: 128 230 102 : # 80E666
Найдя промежуточный цвет, вы можете приблизить ближайший к сети безопасный цвет: # 99FF66
Конвертер между шестнадцатеричным и десятичным, чтобы сделать это самостоятельно, можно найти здесь .
Вот скрипт PHP , который делает то, что вам нужно. Вот скрипт JavaScript, основанный на методе, описанном выше (связанное преобразование шестнадцатеричного в десятичное в JS ):
color1 = "#66CC00";
color2 = "#99FFCC";
r1 = parseInt(color1.substring(1,3), 16);
g1 = parseInt(color1.substring(3,5), 16);
b1 = parseInt(color1.substring(5,7), 16);
r2 = parseInt(color2.substring(1,3), 16);
g2 = parseInt(color2.substring(3,5), 16);
b2 = parseInt(color2.substring(5,7), 16);
r3 = (Math.round((r1 + r2)/2)).toString(16);
g3 = (Math.round((g1 + g2)/2)).toString(16);
b3 = (Math.round((b1 + b2)/2)).toString(16);
color3 = "#" + r3 + g3 + b3;