Столбцовая 3D диаграмма на php

Столбцовая 3D диаграмма на phpБлуждая по просторам интернета я наткнулся на пару интересных статей, в них обсуждалась возможность рисования 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);
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*