Не текстом единым
Никита Кислицин
Xakep, номер #060, стр. 060-094-4
Пишем софтину
Я долго думал, какую бы написать программу, чтобы наглядно проиллюстрировать описанные выше возможности библиотеки GD. Сразу захотелось написать графопостроитель - программу, которая строила бы определяемые пользователем математические функции. Правда потом подумал, что неблагодарное это дело - возни много, задача тривиальная, а толку - ну решительно никакого :). Хотел также написать очередной скрипт-шутку, печатающий передаваемую GET'ом строку на майке красивой девушки после слов "i love ...", но тоже раздумал. Ну не знаю я ни одного человека, имеющего отношение к компьютерам, который бы на такое повелся - года три назад такое, может, и прокатило бы... В итоге вернулся к графопостроителю, но уже с более осмысленной задачей.
Определимся. У нас есть некоторый массив чисел. Требуется построить ломаную - "график" - соединяющую соответствующие точки в декартовой системе координат. Причем одна координата ("X") является индексом элемента, а другая ("Y") - его значением. Задача довольно проста, но взята не из воздуха - например, графики посещаемости сайтов за некоторый период строятся примерно такой же функцией. Сказано - сделано, так что смотри врезку с кодом, там все подробно прокомментировано. От тебя лишь требуется разобраться в этом коде и использовать его в своих целях.
На этом все. Удаче тебе и оревуар.
Кусок кода PHP
<?
function BiuldGraf($array) {
$graf=ImageCreate(333, 333); /* Создаем изображение */
/* Получаем индекс черного цвета */
$black=ImageColorAllocate($graf, 0, 0, 0);
/* Рисуем ось "X" толщиной 3 пиксела */
ImageLine($graf, 0, 303, 333, 303, $black);
ImageLine($graf, 0, 302, 333, 302, $black);
ImageLine($graf, 0, 301, 333, 301, $black);
/* Рисуем ось "Y" толщиной 3 пиксела */
ImageLine($graf, 30, 0, 30, 333, $black);
ImageLine($graf, 31, 0, 31, 333, $black);
ImageLine($graf, 32, 0, 32, 333, $black);
$sa = sort($array);
$n = round(300/count($array));
for($i=0; $i<count($array); $i++) {
ImageLine($graf, 32+$n*$i, 301, 32+$n*$i, 291, $black);
ImageString($graf, 5, 5+$n*$i, 318, "$i", $black);
$sum += $array[$i];
}
$nn = round(300/$sum);
ImageLine($graf, 32, 333, 42, 333, $black);
for($i=1; $i<count($array); $i++) {
ImageLine($graf, 32, 333-$nn*$sa[$i], 42, 333-$nn*$sa[$i], $black);
ImageString($graf, 5, 20, 333-$nn*$sa[$i], "$sa[$i]", $black);
}
/* Рисуем график */
for($j=0; $j<count($sa)-1; $j++)
ImageLine($graf, 32+$i*$n, $array[$i], 32+($i+1)*$n, $array[$i+1], $black);
}
?>
WWW
GD либа
www.boutell.com/gd/
PHP клуб
www.phpclub.net
Info-ZIP
www.info-zip.org
FreeType
www.freetype.org
CD
На нашем диске ты найдешь последние версии используемых библиотек для различных ОС, а также описание API-функций по работе с графикой в PHP.