PHP: создание графического изображения
РНР не ограничивается созданием только HTML документов. Можно создавать различные виды медиа-контента, в том числе и файлы изображений.
Для этого необходимо установить библиотеку GD, которая позволяет работать с различными форматами изображений, такими как GIF, PNG, JPEG, WBMP, и XPM.
Вывод PHP потока возможен непосредственно в браузер. Для этого нужно собрать PHP с библиотекой GD функций, для работы с изображениями. GD и PHP могут также потребовать другие библиотеки, в зависимости от форматов с которыми нужно работать.
Поддержка этой библиотеки включается при компиляции PHP с опцией --with-gd.
По умолчанию PHP формирует HTML-страницу с заголовком Content-type: text/html
. Однако, возможно формирование средствами PHP различного вида медиа-контента. Для формирования заголовков создаваемого контента в PHP используется функция header().
<?php header("Content-type: text/html"); // выводим документ в формате HTML header("Content-type: text/plain"); // выводим обычный текстовый файл header("Content-type: image/jpeg"); // выводим изображение в формате JPEG header("Content-type: image/png"); // выводим изображение в формате PNG header("Content-type: image/gif"); // выводим изображение в формате GIF header("Content-type: application/zip"); // выводим ZIP файл ?>
Конечно, отправка одного заголовка для формирования изображения недостаточно, необходимо позаботиться о том, чтобы вывести данные в нужном формате. Библиотека GD предоставляет набор функций с помощью которых можно строить изображения на основе графических примитивов, а также обрабатывать уже существующие. Полную документацию по библиотеке GD можно посмотреть здесь. На лекции рассмотрим несколько ключевых функций, необходимых для построения несложных изображений и понимания принципов работы библиотеки:
Пример синтаксиса |
Версия |
Описание |
---|---|---|
$im = |
Любая |
Создает пустой холст (256 цветов) $im высотой |
$col = |
Любая |
Помещает в переменную $col цвет, образованный |
ImageEllipse |
2.0.2 |
Создает эллипс на изображении $im с центром в |
ImageFilledEllipse |
2.0.2 |
Идентична ImageEllipse, но эллипс заполняется |
ImageFill |
Любая |
Производит заливку, начиная с заданных координат (верхний левый угол имеет координаты 0, 0), цветом $col в изображении $im. |
ImageLine |
Любая |
Рисует линию цвета $col, которая проходит |
ImagePolygon |
Любая |
На изображении $im рисует многоугольник, |
ImageFilledPolygon |
Любая |
Идентична ImagePolygon, но многоугольник заполняется |
ImageRectangle |
Любая |
На изображении $im рисует прямоугольник, |
ImageFilledRectangle |
Любая |
Идентична ImageRectangle, но прямоугольник |
ImageSetStyle |
2.0.2 |
Эти функции позволяют изменить стиль |
ImageSetPixel |
Любая |
В изображении $im рисует точку с координатами |
ImageString |
Любая |
В изображении $im создает строку $text с |
ImageStringUp |
Любая |
Идентична ImageString , но строка выводится |
Начнем с простого: нарисуем с помощью PHP красный квадрат на синем фоне. Чтобы получить желаемый квадрат, необходимо выполнить следующие действия:
• Установить тип содержимого как «изображение», чтобы браузер смог интерпретировать изображение должным образом;
• Создать новое пустое изображение, установив нужную ширину и высоту;
• Сделать цвет фона синим;
• Получить новый цвет - красный;
• Отрисовать квадрат красным цветом;
• Сохранить окончательный вариант изображения и передать его в браузер;
• Очистить память, которая использовалась для создания и хранения изображения;
• Организовать отображение рисунка из файла index.php
Теперь, когда мы определились с порядком действий, можно начинать кодирование. Итак, вот код для создания красного квадрата. После написания сохраним его под именем ‘basic_square.php’.
<?php //Устанавливаем тип содержимого header('content-type: image/png'); //Определяем размеры изображения //125px width, 125px height $image = imagecreate(125, 125); //Выбираем цвет фона $blue = imagecolorallocate($image, 0, 0, 255); //Устанавливаем еще один цвет – красный для построения квадрата //Обратите внимание – цвет созданный первым, будет цветом фона. $red = imagecolorallocate($image, 255, 0, 0); //Строим закрашенный квадрат красным цветом ImageFilledRectangle($image, 50, 50, 75, 75, $red); //Сохраняем файл в формате png и выводим его imagepng($image); //Чистим использованную память imagedestroy($image); ?>
Нарисованный квадрат можно увидеть открыв в браузере ссылку на файл basic_square.php, но лучше будет, если изображение будет выведено на главной странице index.php с помощью тега :
<img src='/basic_square.php' alt='красный квадрат' />
Результат: