From color to color to ...... to color with fade effect. Good for dynamic bar chart.
<?php
function MultiColorFade($hex_array, $steps) {
$tot = count($hex_array);
$gradient = array();
$fixend = 2;
$passages = $tot-1;
$stepsforpassage = floor($steps/$passages);
$stepsremain = $steps - ($stepsforpassage*$passages);
for($pointer = 0; $pointer < $tot-1 ; $pointer++) {
$hexstart = $hex_array[$pointer];
$hexend = $hex_array[$pointer + 1];
if($stepsremain > 0){
if($stepsremain--){
$stepsforthis = $stepsforpassage + 1;
}
}else{
$stepsforthis = $stepsforpassage;
}
if($pointer > 0){
$fixend = 1;
}
$start['r'] = hexdec(substr($hexstart, 0, 2));
$start['g'] = hexdec(substr($hexstart, 2, 2));
$start['b'] = hexdec(substr($hexstart, 4, 2));
$end['r'] = hexdec(substr($hexend, 0, 2));
$end['g'] = hexdec(substr($hexend, 2, 2));
$end['b'] = hexdec(substr($hexend, 4, 2));
$step['r'] = ($start['r'] - $end['r']) / ($stepsforthis);
$step['g'] = ($start['g'] - $end['g']) / ($stepsforthis);
$step['b'] = ($start['b'] - $end['b']) / ($stepsforthis);
for($i = 0; $i <= $stepsforthis-$fixend; $i++) {
$rgb['r'] = floor($start['r'] - ($step['r'] * $i));
$rgb['g'] = floor($start['g'] - ($step['g'] * $i));
$rgb['b'] = floor($start['b'] - ($step['b'] * $i));
$hex['r'] = sprintf('%02x', ($rgb['r']));
$hex['g'] = sprintf('%02x', ($rgb['g']));
$hex['b'] = sprintf('%02x', ($rgb['b']));
$gradient[] = strtoupper(implode(NULL, $hex));
}
}
$gradient[] = $hex_array[$tot-1];
return $gradient;
}
$multi_hex_array = array();
$multi_hex_array[] = array('FF0000','FFFF00');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF','000000');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF','000000','FFFFFF');
foreach($multi_hex_array as $hex_array){
$totcolors = count($hex_array);
$steps = 44;
$a = MultiColorFade($hex_array, $steps);
$tot = count($a);
$table = '<table border=1 width="300">' . "\n";
for ($i = 0; $i < $tot; $i++){
$table .= ' <tr><td bgcolor="' . $a[$i] . '">' . ($i+1) .'</td><td><pre>' . $a[$i] . '</pre></td></tr>' . "\n";
}
$table .= '</table><br /><br />';
echo '<br />Demanded steps = ' . $steps . '<br />';
echo 'Returned steps = ' . $tot;
if($steps == $tot){
echo '<br />OK.' . $steps . ' = ' . $tot . '<br />';
}else{
echo '<br /><span style="color:#FF0000">FAILED! Demanded steps and returned steps are NOT equal!: ' . $steps . ' != ' . $tot . '</span><br />';
}
echo $table;
}
?>
Repley.