| |
ет
практи-
чески со всеми распространенными форматами изображений, в том числе с GIF,
JPEG и PNG.
list GetIimageSize(string $filename [,array& $imageinfo])
Эта функция предназначена для быстрого определения в сценарии размеров (в
пиксе-
лах) и формата рисунка, имя файла которого передано ей в первом параметре. Она
возвращает список из четырех элементов. Первый элемент (с ключом 0) хранит ши-
рину картинки в пикселах, второй (с ключом 1) — его высоту. Ячейка массива с
клю-
чом 2 определяется форматом изображения: 0, если это GIF, 1 в случае JPG и 2
для
PNG. Следующий элемент, имеющий ключ 3, будет содержать после вызова функции
строку примерно следующего вида: height=sx width=sy, где sx и sy — соответст-
венно ширина и высота изображения. Это применение задумывалось для того, чтобы
облегчить вставку данных о размере изображения в тэг , который может быть
сгенерирован сценарием.
Часть IV. Стандартные функции PHP 316
Работа с изображениями
и библиотека GD
Давайте теперь рассмотрим идею создания рисунков сценарием "на лету". Например,
как мы уже замечали, это очень может пригодиться при создании сценариев-
счетчиков, графиков, картинок-заголовков да и многого другого.
Для деятельности такого рода существует специальная библиотека под названием
GD. Она содержит в себе множество функций (такие как рисование линий, растяже-
ние/сжатие изображения, заливка до границы, вывод текста и т. д.), которые
могут
использовать программы, поддерживающие работу с данной библиотекой. PHP (со
включенной поддержкой GD) как раз и является такой программой.
Поддержка GD включается при компиляции и установке PHP. Возможно, неко-
торые хостинг-провайдеры ее не имеют. Выясните, работает ли PHP вашего
хостера с библиотекой GD.
Пример
Начнем сразу с примера сценария, который представляет собой не HTML-страницу в
обычном смысле, а рисунок PNG. То есть URL этого сценария можно поместить в
тэг:
Как только будет загружена страница, содержащая указанный тэг, сценарий запус-
тится и отобразит надпись Hello world! на фоне рисунка, лежащего в
images/button.png. Полученная картинка нигде не будет храниться — она созда-
ется "на лету".
Рис. 23.1. Демонстрация
возможностей вывода
TrueType-шрифтов на PHP
Глава 23. Работа с изображениями 317
Листинг 23.1. Создание картинки "на лету"
// Получаем строку, которую нам передали в параметрах
$string=$QUERY_STRING;
// Загружаем рисунок фона с диска
$im = imageCreateFromPng("images/button.png");
// Создаем в палитре новый цвет — оранжевый
$orange = imageColorAllocate($im, 220, 210, 60);
// Вычисляем размеры текста, который будет выведен
$px = (imageSx($im)-7.5*strlen($string))/2;
// Выводим строку поверх того, что было в загруженном изображении
imageString($im,3,$px,9,$string,$orange);
// Сообщаем о том, что далее следует рисунок PNG
Header("Content-type: image/png");
// Теперь — самое главное: отправляем данные картинки в
// стандартный выходной поток, т. е. в браузер
imagePng($im);
// В конце освобождаем память, занятую картинкой
imageDestroy($im);
?>
Итак, мы получили возможность "на лету" создавать стандартные кнопки с разными
надписями, имея только "шаблон" кнопки.
Создание изображения
Давайте теперь разбираться, как работать с картинками в GD. Для начала нужно
кар-
тинку создать — пустую (при помощи imageCreate()) или же загруженную с диска
(imageCreateFromPng(), imageCreateFromJpeg() или
imageCreateFromGif(), в зависимости от того, какие форматы поддерживаются
PHP и GD).
int imageCreate(int $x, int $y)
Создает пустую картинку размером $x на $y точек и возвращает ее идентификатор.
После того, как картинка создана, вся работа с ней осуществляется именно через
этот
идентификатор, по аналогии с тем, как мы работаем с файлом через его дескриптор.
int imageCreateGromPng(string $filename) или
int image
|
|