| ||
Работа с графикой в PHPd909 Если вы часто пользуетесь Интернетом для поиска информации, то не раз, наверное, приходилось видеть где-нибудь внизу страницы красиво оформленные счетчики посещений. Примером могут служить счетчики, предоставляемые службой Hotlog (www.hotlog.ru). Большинство биржевых сайтов на своих страницах размещают обновляемые в реальном времени графики, например изменения курса доллара (www.datek.com). Предоставляемые пользователю подобные изображения генерируются "на лету" на сервере. При этом используются разные способы - можно разместить на странице Java-апплет, который использует информацию, например, из текстового файла на сервере в качестве источника для построения какой-либо диаграммы. Этот способ идеален для тех случаев, когда пользователю необходимо видеть реально изменяющуюся информацию (например, соединившись с сервером точного времени, такой апплет может не только показывать точное время, но и постоянно корректировать его). Графические счетчики же более разумно генерировать еще на сервере. Конечно, сам сервер этого не сделает. Поэтому надо оказать ему помощь в этом достаточно несложном деле. Чем мы сейчас и займемся. Что нам нужно. В подготовке и проверке примеров я использовал Apache 1.3.12 (www.apache.org), а также интерпретатор PHP 4.0 (www.php.com). Операционная система - Windows 2000 Professional. На самом деле примеры универсальны - я просто использую реализацию PHP для этой системы. С инструментом разобрались. Теперь давайте настроим PHP для работы с графикой. Я не буду описывать процесс настройки самого сервера для работы с PHP, предполагая, что все уже установлено и работает в минимальной конфигурации. Если у вас есть проблемы при установке Apache или PHP - пишите. Для работы с графикой нам также потребуется библиотека (модуль) под названием GD (php_gd.dll для Windows), поставляемая с PHP. Она содержит в себе множество функций (такие как рисование линий, растяжение/сжатие изображения, заливка до границы, вывод текста и т.д.), которые могут использовать программы, поддерживающие работу с данной библиотекой. Для подключения модуля на вашем локальном диске нужно открыть в Блокноте файл php.ini из системного каталога Windows (обычно C:\Windows для Win98 или C:\Winnt для Win2000). Настройте следующий параметр: extension_dir=C:\Program Files\PHP4\ и уберите ; в начале. Этим вы снимете комментарий, и модуль будет доступен PHP. Вот, в принципе, и вся настройка. Перейдем к примеру. В том же Блокноте наберите текст следующего содержания и сохраните его под именем, например, index.php: <?php Теперь, если www-сервер запущен, в строке вашего браузера введите путь к только что созданному файлу, что будет выглядеть примерно так: Все зависит от того, где вы разместили данный php-скрипт. В результате браузер отобразит рисунок: Теперь можно заняться разбором кода. Поскольку пример очень прост своим результатом, то и код скрипта несложен. Опять же, я полагаю, что вы знакомы с синтаксисом языка, поэтому опишу лишь, что делают функции. Сначала получаем идентификатор создаваемого изображения и создаем пустую картинку функцией imageCreate, имеющей два параметра - ширину и высоту изображения. После того как картинка создана, вся работа с ней осуществляется через этот идентификатор, по аналогии с тем, как мы работаем с файлом через его дескриптор. Как варианты этой функции могут служить функции imageCreateFromPng, imageCreateFromJpeg, imageCreateFromGif, параметр у которых один - имя файла с изображением. С помощью функции imageColorAllocate создаем новый цвет $color. Получаем цвет, связанный с соответствующей тройкой RGB. Первым параметром функция требует идентификатор изображения, загруженного в память или созданного до этого. Практически каждый цвет, который планируется в дальнейшем использовать, должен быть получен (определен) при помощи вызова этой функции. Следующие три параметра - составляющие red, green, blue. Функция imageColorTransparent указывает GD, что соответствующий цвет $color (заданный своим идентификатором) в изображении $img должен обозначиться как прозрачный. Возвращает идентификатор установленного до этого прозрачного цвета, либо false, если таковой не был определен ранее. (Надо отметить, что не все форматы поддерживают задание прозрачного цвета - например, JPEG не может его содержать). Функцией imageFilledRectangle рисуем закрашенный прямоугольник в изображении, заданном идентификатором $img, цветом $color. Координаты (последовательно) задают координаты верхнего левого и правого нижнего углов (отсчет, как обычно, начинается с верхнего угла и идет слева направо и сверху вниз). Мы используем эту функцию для того, чтобы целиком закрасить только что созданный рисунок прозрачным цветом. Далее определяем новый цвет (красный) и функцией imageRectangle рисуем прямоугольник. Ее параметры те же, что и у предыдущей функции. Их различие лишь в том, что первая функция рисует закрашенный прямоугольник, а вторая - только контур (толщиной 1 пиксель). Функция imageLine рисует сплошную тонкую линию в изображении $img, проходящую через точки ($x1, $y1) и ($x2, $y2), цветом $col. Последняя в скрипте функция imageGif может вызываться двумя способами - с одним параметром, либо с двумя. Первый параметр задает идентификатор изображения, второй - имя файла. Эти функции сохраняют изображение, заданное своим идентификатором и находящееся в памяти, на диск или же выводят его в браузер. Если параметр $filename опущен, то сжатые данные в соответствующем формате выводятся прямо в стандартный выходной поток, т.е. серверу (который передает данные браузеру). Таким образом можно строить графики некоторых функций, однако для отображения счетчика посещений страницы неплохо было бы вывести текстовую строку. Я не буду описывать, как именно сделать учет посещений сайта. Разберем лишь скрипт, выводящий в стандартный поток следующее изображение: Картинка создана с помощью двух прямоугольников, которые мы уже умеем рисовать, и функции imageTTFText. Библиотека GD поддерживает работу со шрифтами PostScript и TrueType. Для того чтобы заработали приведенные ниже функции, PHP должен быть откомпилирован и установлен вместе с библиотекой FreeType, доступной по адресу www.freetype.org. В Windows-версии PHP она установлена по умолчанию. Давайте посмотрим, как это происходит: <?php // весь остальной код создает на картинке изображение текста // отдаем картинку серверу... Как видите - достаточно несложно. Давайте разберем теперь функцию imageTTFText. Эта функция помещает строку $my_text в изображение $img цветом $color. Параметр $angle задает угол наклона (в градусах) выводимой строки, отсчитываемый от горизонтали против часовой стрелки. Координата ($x, $y) указывает положение так называемой базовой точки строки (обычно это ее левый нижний угол). Параметр $size задает размер ширфта (в пунктах), который будет использоваться при выводе строки. $font должен содержать имя TTF-файла, в котором и хранится шрифт. Следует заметить, что эта переменная должна содержать полный путь к файлу, если он находится не в одном со скриптом каталоге. Кроме TrueType и PostcScript шрифтов библиотека GD имеет некоторые возможности по работе с фиксированными шрифтами. Шрифты представляют собой специальные ресурсы, имеющие собственный идентификатор, и чаще всего загружаемые из файла или встроенные в GD. Каждый символ шрифта может быть отображен лишь в моноцветном режиме, т.е. "рисованные" символы не поддерживаются. Встроенных шрифтов всего 5 (идентификаторы от 1 до 5), чаще всего в них входят моноширинные символы разных размеров. Остальные шрифты должны быть предварительно загружены из файла, описание формата которого выходит за рамки данной статьи. Теперь, используя графические примитивы GD, вы можете создавать более сложные изображения, что называется, "на лету". Если возникнут проблемы или вопросы - пишите, помогу разобраться. Источник: "Компьютер Price", http://www.comprice.ru
| ||
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |