Меня интересуют алгоритмы генерации n градуированных цветов между двумя заданными цветами, которые генерируют плавные переходы между каждым из них.
Я попытался использовать статические два канала, например R и G, и постепенное изменение B, но иногда разница между двумя цветами сильнее, чем у соседей.
Я хочу проверить разные алгоритмы и проанализировать их слабые и сильные стороны.
Я написал этот код, и он кажется логичным, но переходы между одним цветом сложнее, чем между другими (например,между 0 и 1 сложнее, чем между 1 и 2):
<?php
$c1 = array(128,175,27); // Color 1
$c2 = array(255,255,140); // Color 2
$nc = 5; // Number of colors to display.
$dc = array(($c2[0]-$c1[0])/($nc-1),($c2[1]-$c1[1])/($nc-1),($c2[2]-$c1[2])/($nc-1)); // Step between colors
for ($i=0;$i<$nc;$i++){
echo '<div style="width:200px;height:50px;background-color:rgb('.round($c1[0]+$dc[0]*$i).','.round($c1[1]+$dc[1]*$i).','.round($c1[2]+$dc[2]*$i).');">'.$i.'</div>'; // Output
}
?>
Есть ли лучший алгоритм для этого?
Я привожу пример: В приведенном выше коде я использовал $ c1 = array (192,5,248 );
и $ c2 = array (142,175,240);
и $ nc = 10;
и получили следующее изображение:
Значения RGB 0,1,8 и 9 составляют:
Если вы посмотрите, есть разница между соседними цветами 6,19,1 . Но визуально переход между 0 и 1 более мягкий, чем переход между 8 и 9. И для HSV то же самое. Это что-то с некоторыми цветами, которые делают переход более жестким или мягким.