Динамическая
графика – это просто
Кирилл Сухов
Ещё каких-то лет пять назад человек, занимающийся разработкой сайтов, мог
гордо именовать себя веб-мастером, не вызывая при этом иронических усмешек у
коллег. В это понятие входили дизайн, вёрстка, веб-программирование, и в
объявлениях о приёме на работу часто мирно уживались требования по знанию Perl
и Photoshop. Теперь, разумеется, многое изменилось, и в резюме веб-программиста
считается дурным тоном упоминать навыки работы с графическими пакетами, даже
если таковые и присутствуют. Тем не менее если вы работаете в небольшом
проекте, в бюджете которого не предусмотрен многочисленный штат сотрудников, то
время от времени у вас может возникнуть необходимость в самостоятельном
создании кое-какой графики – кнопочек, маркеров, пиктограмм, фоновых
изображений, которые нужны для любого веб-интерфейса. В общем случае такие
задачи решаются использованием готовой библиотеки изображений или приглашением
знакомого дизайнера (как правило, за солидный гонорар – две, а то и три бутылки
пива). Проблема, решение которой изложено ниже, не так стандартна и немного
сложнее, хотя встречается не так уж редко.
Итак, представим, что вы разрабатываете/ведёте биллинг,
или складскую систему, или… в общем, приложение, использующее базу данных и
несущее достаточно сложную логику. Представим также (хотя это и сложнее), что
никаких особых проблем у вас нет – приложение работает корректно, новая
функциональность добавляется относительно легко, небольшие корректировки много
времени не отнимают. В целом вы довольны, но кроме вас в офисе трудятся
менеджеры, бухгалтеры, начальство, и вот у последнего возникают довольно
своеобразные требования. В частности, шефа не устраивают ваши отчёты,
генерирующиеся в виде аккуратных HTML-таблиц, ему нужны графики, причём графики
красивые и ежедневно (ежечасно?!) обновляющиеся. Не рисовать же их руками?
К счастью, PHP-разработчик может воспользоваться
таким мощным инструментом, как графическая библиотека GD, включаемая по
умолчанию в дистрибутив, начиная с версии 4.0.1. Возможность попиксельной
прорисовки и обработки изображения, манипуляции с размером картинки и текстом,
наличие примитивов позволяют генерировать достаточно сложную графику. Проблема
заключается в том, что на построение качественного графика или диаграммы уйдет
довольно много времени, а наша задача в данном случае – справиться с поручением
в сжатые сроки и с минимальным количеством кода. Существует некоторое
количество готовых библиотек для разработки графиков, например, автор этих
строк в своё время использовал довольно удачную разработку – phplot (http://www.phplot.com), но безусловным
лидером в этом отношении является объектно-ориентированная библиотека JpGraph.
Среди её преимуществ можно выделить возможность
построения множества видов графиков, неограниченного числа графиков одного типа
в одном изображении, сглаживание линий, заполнение фонов диаграмм и гистограмм
градиентной заливкой, генерация карт-изображений и кэширование рисунков.
Стандартная версия библиотеки бесплатна (существует и коммерческая версия pro,
в которой доступны некоторые дополнительные возможности, в частности,
построение штрих-кодов). В статье речь пойдет о стандартной версии, о
возможностях коммерческой читатель может ознакомиться на сайте производителя – http://www.aditus.nu/jpgraph/jpg_proversion.php.
Ещё одним достоинством этого продукта является прекрасная документация, идущая
вместе с дистрибутивом. На самом деле подробность документации ставит под
сомнение необходимость чтения этой статьи, но автор этих строк, как наверняка и
кто-нибудь из вас, попадал в ситуацию, когда времени на обстоятельное изучение
руководства просто нет, и я попытался изложить этот материал для того, чтобы
программист по его прочтении мог немедленно приступить к работе.