[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Построение диаграмм средствами PHP4

PHP4 предоставляет возможность динамически формировать графические изображения...

Зачем нужны динамические изображения? Ведь существует множество графических пакетов, по возможностям намного опережающие возможности PHP. Да, изображения типа логотипов действительно не имеет смысла формировать динамически, так как такое изображение поступать в браузер медленнее обычного. А если необходимо вывести диаграмму? Данные постоянно изменяются...

Для осуществления всего этого необходимо установить PHP4 версии не ниже 4.3.х и библиотеку GD версии не ниже 2.х... Требования обычные - чем свежее версия, тем лучше. Как узнать о версиях?

Создаем файл phpinfo.php:

<?php
phpinfo();
?>

Запускаем http://localhost/phpinfo.php - или какой у вас там путь...

Смотрим самую верхнюю строку. Это версия PHP, к примеру, PHP Version 4.3.3. Ниже ищем заголовок таблицы gd. Это информация о графической библиотеке. Если у вас имеется строка типа GD Version bundled (2.0.15 compatible), то все в порядке, если нет, обновите. Если вообще нет таблицы gd - установите библиотеку gd. Если желаете знать о ней побольше - http://www.boutell.com/gd/.

Если у вас все в порядке, следуем далее.

Вначале о входных данных. Их можно взять из адресной строки браузера, из файла, из базы данных. Чтобы не усложнять код, в данном примере они помещены в начало кода. Допустим, это количество проданных товаров со склада. Видов товаров - всего четыре, но количество можно и поменять.

Создаем файл gd2.php:

<?php
?>

Так создаются все php-файлы. Наш файл gd2.php будет создавать две диаграммы в PNG-формате. Диаграммы бывают многих видов. У нас будет горизонтальная нормированная и обычную столбцовую. Объем создавать не будем. :)

Файл gd2.php условно делится на две части - входные данные с первичной обработкой и создание графического изображения.

Итак, входные данные:

 $goods[0]=30;
 $goods[1]=50;
 $goods[2]=100;
 $goods[3]=70;

В серьезных приложениях вместо них должен располагаться код приема данных. В нашем случае этих данных вполне достаточно, чтобы постоить диаграммы.

Первый вид - горизонтальная нормированная. Здесь ширина рисунка обозначает общее количество, а удельный вес каждого вида обозначен по ширине отдельным цветом.

 $sum=0;
 foreach($goods as $a) {$sum=$sum+$a;}
 $count=count($goods)-1;
 for($i=0;$i<=$count;$i++)
 {$part[$i]=round($goods[$i]/$sum*500,0);}

В данном коде определяется общее количество проданных товаров и число видов товаров. В цикле for() рассчитывается ширина каждой части из расчета на рисунок шириной 500 пикселей. Как видно, ничего сложного - курс средней школы.

 

Второй вид - обычная столбцовая. Тут еще проще...

 $max=max($goods);
 for($j=0;$j<=$count;$j++)
 {$column[$j]=round($goods[$j]/$max*100,0);}

Определяется наибольший элемент массива. Столбец, означающий этот вид, будет высотой в 100 пикселей. Остальные будут пропорционально меньше.

Математическая часть завершена. Все необходимое для диаграмм получено.

Теперь можно приступать к графике.

 header("Content-type: image/png");
 $img=ImageCreate(500,200);
#Здесь создается заголовок png-файла и основа рисунка.

 $white=ImageColorAllocate($img,255,255,255);
 $red=ImageColorAllocate($img,255,0,0);
 $green=ImageColorAllocate($img,0,255,0);
 $blue=ImageColorAllocate($img,0,0,255);
 $gray=ImageColorAllocate($img,128,128,128);
#Здесь определяются цвета. Разумеется, их может быть больше.

 $color=array($red,$green,$blue,$gray);
#Здесь создаем массив цветов - красный, зеленый, синий и черный.

Все уже определено...

Осталось вывести первую диаграмму в верхней половине рисунка.

 $x1=0;$x2=0;
 for($i=0;$i<=$count;$i++)
 {
 $x2=$x1+$part[$i];
 ImageFilledRectangle($img,$x1,20,$x2,80,$color[$i]);
 $x1=$x2;
 } 

В данной диаграмме Y-координаты не меняются. Надо рассчитать лишь Х-координаты. В строке $x2=$x1+$part[$i]; определяется ширина закрашенного участка для одного цвета. В следующей строке функции ImageFilledRectangle() рисует прямоугольник и закрашивает его цветом $color[], а строка $x1=$x2; определяет новое значение координаты Х1 - ведь конец предыдущего участка является началом следующего...

Теперь вторая диаграмма...

Она будет расположена в нижней части рисунка.

 $x=0; $y=0; $width=50;
 for($j=0;$j<=$count;$j++)
 {
 $y=199-$column[$j];
 ImageFilledRectangle($img,$x,$y,$x+$width,199,$color[$j]);
 $x=$x+$width;
 }

Здесь требуется задать еще и ширину столбца. В таких диаграммах столбцы имеют одинаковую ширину. Пусть она будет равной 50 пикселей. В большинстве случаях обычные столбцовые диаграммы направлены вверх. Поэтому основание столбцов будет на одном уровне, а верхняя грань - на разных. Для этой цели в код вставляем строку $y=199-$column[$j];. Функция ImageFilledRectangle() действует аналогично первому случаю. В строке $x=$x+$width; задается новое значение координаты Х. Столбцы будут касаться друг друга. Не нравится? Замените строкой $x=$x+$width+10;. Думаю, понятно для чего это надо.

Ну вот и все... Осталось вывести рисунок в браузер...

 ImagePNG($img);

Ничего сложного...

Хотя некоторые спросят: а как насчет круговых диаграмм. А также, как и нормированные. Только вместо линии - круг и дуги. Они создаются с помощью функции imagearc().

Чего-то не хватает, правда? Да... подписей к цветам. Это вполне реально и несложно. Только это материал для другой статьи. Иначе данная статья превратится в книгу... Если что-то не понятно в приведенных функциях, то обратитесь к мануалу. Там еще много полезного найдете.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4741 сегодня - 0

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4663 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 4451 сегодня - 0

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4503 сегодня - 0

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4487 сегодня - 0

Популярные статьи



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects