Алгоритм генерации градуированных цветов RGB в PHP

Меня интересуют алгоритмы генерации 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; и получили следующее изображение:

graduated colors example

Значения RGB 0,1,8 и 9 составляют:

  • 0 = 192,5,248
  • 1 = 186,24,247
  • 8 = 148,156,241
  • 9 = 142,175,240

Если вы посмотрите, есть разница между соседними цветами 6,19,1 . Но визуально переход между 0 и 1 более мягкий, чем переход между 8 и 9. И для HSV то же самое. Это что-то с некоторыми цветами, которые делают переход более жестким или мягким.

7
задан Memochipan 23 November 2011 в 16:11
поделиться