РНР 5 в подлиннике

Страница 287 из 554


Глава 30. Работа с изображениями

579

II Загружаем рисунок фона с диска.

$im = imageCreateFromGif("button.gif") ;

// Создаем в палитре новый цвет — черный.

$color = iraageColorAllocate($im, 0, 0, 0);

// Вычисляем размеры текста, который будет выведен.

$рх =■ (imageSX ($im)-6. 5*strlen ($string) ) /2;

// Выводим строку поверх того, что было в загруженном изображении.

iraageString($ira, 3, Spx, 1, $string, $color);

// Сообщаем о том, что далее следует рисунок PNG.

Header("Content-type: image/png");

// Теперь — самое главное: отправляем данные картинки в // стандартный выходной поток, т. е. в браузер. imagePng($im) ,-

II В конце освобождаем память, занятую картинкой.

imageDestroy($im);

?>

Итак, мы получили возможность "на лету" создавать стандартные кнопки с разными надписями, имея только "шаблон" кнопки.

Обратите внимание на важный момент: мы считали изображение в формате GIF

(ФУНКЦИЯ imageCreateFromGif ()), ho ВЫВеЛИ в браузер — уже в ВИДе PNG

(imagePngo), потому что сохранение рисунков GIF поддерживается не во всех версиях GD.

Создание изображения

Давайте теперь разбираться, как работать с изображениями в GD. Для начала нужно картинку создать — пустую (при помощи функции imageCreate ()) или же загруженную С ДИСКа (функции imageCreateFromPngO, imageCreateFromJpeg() ИЛИ

imageCreateFromGif (), как мы сделали в примере выше).

resource imageCreate(int $х, int $у)

Создает "пустую" пшштровую (palette-based, т. е. с фиксированным набором возможных цветов) картинку размером $х на $у точек и возвращает ее идентификатор. После того как картинка создана, вся работа с ней осуществляется именно через этот идентификатор, по аналогии с тем, как мы работаем с файлом через его дескриптор.

Про палитру мы детально поговорим позже (см. разд. "Работа с цветом в формате RGB" далее в этой ыаве). Сейчас только скажем, что изображения, созданные при помощи функции imageCreate о, обычно сохраняют в формате PNG или GIF, но не JPEG. Это связано с тем, что JPEG является полноцветным (true color) форматом, в то время как GIF и PNG могут единовременно содержать лишь фиксированное (не больше 256) количество цветов.

resource imageCreateTrueColor(int $х, int $у)

Данная функция отличается от предыдущей только тем, что она создает полноцветные изображения. В таких изображениях число используемых цветов не ограничено палитрой, и вы можете использовать точки любых оттенков. Обычно imageCreateTrueColor о применяют для создания JPEG-изображений, а также для

580

Часть IV. Стандартные функции РНР

более аккуратного манипулирования картинками (например, при их сжатии или растяжении), чтобы не "потерять цвета".

resource imageCreateFromPng(string $ filename) resource imageCreateFromJpeg(string $ filename) resource imageCreateFromGif(string $filename)

Эти функции загружают изображения из файла в память и возвращают его идентификатор. Как и после вызова функции imageCreate о, дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и хранится в памяти уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, например, масштабирование, рисование линий и т. д. При сохранении на диск или выводе В браузер функцией imagePngO (ИЛИ, Соответственно, imageJpegO И imageGifo)

картинка автоматически упаковывается.

Функция imageCreateFromJpeg () всегда формирует полноцветное изображение. Функция же imageCreateFromPng() создает в памяти палитровую картинку только в случае, если PNG-файл. указанный в параметрах, содержал палитру (PNG-изображения бывают как палитровыми, так и полноцветными).

Интересно, что функции imagecreateFrom* о могут работать не только с именами файлов, но также и с URL (в случае, если в настройках файла php.ini разрешен режим allow_url_fopen).

Как только картинка создана и получен ее идентификатор, библиотеке GD становится совершенно все равно, какой формат она (картинка) имеет и каким путем ее создали. То есть все остальные действия с картинкой происходят через ее идентификатор, вне зависимости от формата, и это логично — ведь в памяти изображение все равно хранится в распакованном виде (наподобие BMP), а значит, информация о ее формате нигде не используется. Так что вполне возможно открыть PNG-

ИЗОбраЖеНИе С ПОМОЩЬЮ фуНКЦИИ imageCreateFromPng () И Сохранить ее на ДИСК

функцией imagejpego, уже в другом формате. В дальнейшем можно в любой момент времени определить размер загруженной картинки, воспользовавшись функциями

imageSXO HimageSYO. int imageSXfint $im)

Функция возвращает горизонтальный размер изображения, заданного своим идентификатором, в пикселах.

Загрузка изображения

Определение параметров изображения

int imageSY(int $im)

Возвращает высоту картинки в пикселах.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006