Блуждая по просторам интернета я наткнулся на пару интересных статей, в них обсуждалась возможность рисования 3D диаграмм средствами php. Меня заинтересовала эта тема и я еще немного поискав, нашел несколько наработок. Собрав все воедино я написал функцию, которая работает на библиотеке GD. Функция получилась не большая, но результат ее работы весьма интересный. Эта функция получает массив чисел и основываясь на них рисуется столбцовая диаграмма.
Код с подробными комментариями и пример использования находится ниже:
/** * Функция для создания столбцовой диаграммы * @var array $values - массив значений, для столбцов * @var integer $width - не обязательный параметр, ширина диаграммы * @var integer$height - не обязательный параметр, высота диаграммы * * @return image $img - возвращает изображение */ function drawDiagram($values, $width = 400, $height = 200){ $columns = count($values); // количество столбцов $columnWidth = floor($width / $columns) ; // расчет ширины колонки $padding = 5; // отступ между столбцами $img = imagecreate($width,$height); // создаем холст для диаграммы $r = 0xaf; $g = 0xaf; $b = 0xcc; $colorFront = imagecolorallocate ($img, $r, $g, $b); // цвет лицевой части столбца $colorTop = imagecolorallocate ($img, $r+40, $g+40, $b+40); // цвет верхней части столбца $colorRight = imagecolorallocate ($img, $r-20, $g-20, $b-20); // цввет боковой части столбца $white = imagecolorallocate ($img, 0xff, 0xff, 0xff); // цвет фона imagefilledrectangle($img, 0, 0, $width, $height, $white); // создаем заготовку для диаграммы, холст с фоном $maxv = 0; $maxHeight = $height - $columnWidth; // максимальная высота столбца // находим максимальное значение столбца for($i=0;$i<$columns;$i++){ $maxv = max($values[$i],$maxv); } // рисуем столбцы for($i=0;$i<$columns;$i++){ $columnHeight = ($maxHeight / 100) * (( $values[$i] / $maxv) *100); // высота одного столбца // расчет координат столбца $x1 = $i * $columnWidth; $y1 = $height-$columnHeight; $x2 = (($i+1)*$columnWidth)-$padding; $y2 = $height; imagefilledrectangle($img,$x1,$y1,$x2,$y2,$colorFront); // рисуем столбец - переднюю часть // расчет координат для верхней части столбца $offset = ($columnWidth-$padding) / 2; $pt = array($x1, $y1, $x1+$offset, $y1-$offset, $x2+$offset, $y1-$offset, $x2, $y1); imagefilledpolygon($img,$pt,4,$colorTop); // рисуем столбец - верхнюю часть // расчет координат для боковой части столбца $pt = array($x2, $y1, $x2+$offset, $y1-$offset, $x2+$offset, $y2-$offset, $x2, $y2); imagefilledpolygon($img,$pt,4,$colorRight); // рисуем столбец - боковую часть } return $img; // возвращаем, нарисованную диаграмму }
// пример использования header("Content-type: image/png"); // заголовок для браузера - чтоб вывести картинку на экран $values = array(55, 20, 40, 30, 25, 70, 30, 45, 55, 15, 5); // значения столбцов $img = drawDiagram($values, 500, 250); // вызываем функцию для создания диаграммы imagePng($img); // выводим диаграмму на экран // можно вместо вывода на экран сохранить картинку //$path = 'C:/diagramma.png'; //imagePng($im, $path); // В конце освобождаем память, занятую картинкой imageDestroy($img);