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 условно делится на две части - входные данные с
первичной обработкой и создание графического изображения.
В серьезных приложениях вместо них должен располагаться код
приема данных. В нашем случае этих данных вполне достаточно, чтобы постоить
диаграммы.
Первый вид - горизонтальная нормированная. Здесь
ширина рисунка обозначает общее количество, а удельный вес каждого вида
обозначен по ширине отдельным цветом.
$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 пикселей. Как видно, ничего сложного - курс
средней школы.
Определяется наибольший элемент массива. Столбец, означающий
этот вид, будет высотой в 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);
#Здесь создаем массив цветов - красный, зеленый, синий и черный.
Все уже определено...
Осталось вывести первую диаграмму в верхней половине рисунка.
В данной диаграмме Y-координаты не меняются. Надо рассчитать
лишь Х-координаты. В строке $x2=$x1+$part[$i]; определяется ширина
закрашенного участка для одного цвета. В следующей строке функции
ImageFilledRectangle() рисует прямоугольник и закрашивает его цветом
$color[], а строка $x1=$x2; определяет новое значение координаты
Х1 - ведь конец предыдущего участка является началом следующего...
Здесь требуется задать еще и ширину столбца. В таких
диаграммах столбцы имеют одинаковую ширину. Пусть она будет равной 50 пикселей.
В большинстве случаях обычные столбцовые диаграммы направлены вверх. Поэтому
основание столбцов будет на одном уровне, а верхняя грань - на разных. Для этой
цели в код вставляем строку $y=199-$column[$j];. Функция
ImageFilledRectangle() действует аналогично первому случаю. В строке
$x=$x+$width; задается новое значение координаты Х. Столбцы будут
касаться друг друга. Не нравится? Замените строкой $x=$x+$width+10;.
Думаю, понятно для чего это надо.
Ну вот и все... Осталось вывести рисунок в браузер...
ImagePNG($img);
Ничего сложного...
Хотя некоторые спросят: а как насчет круговых диаграмм.
А также, как и нормированные. Только вместо линии - круг и дуги. Они
создаются с помощью функции imagearc().
Чего-то не хватает, правда? Да... подписей к цветам. Это
вполне реально и несложно. Только это материал для другой статьи. Иначе данная
статья превратится в книгу... Если что-то не понятно в приведенных функциях, то
обратитесь к мануалу. Там еще много полезного найдете.
Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее
Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее
Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее
...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее