Допустим, у вас есть цвета в одном числовом значении, например, от (RGB) 0x000000
до 0x112233
, в первую очередь вам нужно извлечь все значения:
function hexToArray( $value){
return array(
'r' => ($value >> 16) & 0xff,
'g' => ($value >> 8) & 0xff,
'b' => ($value >> 0) & 0xff,
);
}
, чем вы должны создатьнекоторый пошаговый алгоритм, наиболее очевидным является увеличение каждого компонента на каждом шаге:
R<sub>i</sub> = R<sub>start</sub> + floor(i * (R<sub>end</sub> - R<sub>start</sub>)/ steps)
, который будет выглядеть так:
$steps--; // Due to 0
$a = hexToArray( 0x000000);
$b = hexToArray( 0x112233);
$step = array();
$result = array();
// Prepare steps
foreach( array( 'r', 'g', 'b') as $color){
$step[$color] = ($b[$color] - $a['color'])/$steps;
}
for( $i = 0; $i <= $steps; $i++){
$tmp = array();
foreach( array( 'r', 'g', 'b') as $color){
$tmp[$color] = $a['color'] + floor($step[$color]*$i);
}
$result[] = $tmp;
}
return $result;
Вы также можете добавить преобразование обратно вlong int
или в строку.
Если у вас будут шестнадцатеричные значения, вам также потребуется другая функция hexToArray
.