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 =
ImageCreate ($width, $height)

Любая

Создает пустой холст (256 цветов) $im высотой
$height и шириной $width. (формат PNG предпочтителен)

$col =
ImageColorAllocate ($im, $red, $green, $blue)

Любая

Помещает в переменную $col цвет, образованный
составляющими красного, зеленого и синего оттенка $red, $green, $blue (диапазон 0 ..
255).

ImageEllipse
($im, $x, $y, $l, $h, $col)

2.0.2

Создает эллипс на изображении $im с центром в
точке ($x,$y), шириной $l, высотой $h и цветом $col.

ImageFilledEllipse
($im, $x, $y, $l, $h, $col)

2.0.2

Идентична ImageEllipse, но эллипс заполняется
цветом $col

ImageFill
($im, $x, $y, $col)

Любая

Производит заливку, начиная с заданных координат (верхний левый угол имеет координаты 0, 0), цветом $col в изображении $im.

ImageLine
($im, $x1, $y1, $x2, $y2, $col)

Любая

Рисует линию цвета $col, которая проходит
между двумя точками с координатами ($x1,$y1) и ($x2,$y2)

ImagePolygon
($im, $points, $num_points, $col)

Любая

На изображении $im рисует многоугольник,
координаты которого перечислены в массиве $points ($points[0]=$x0,
$points[1]=$y0, $points[2]=$x1, $points[3]=$y1, и т. д.),
$num_points – количество точек в массиве, $col - цвет.

ImageFilledPolygon
($im, $points, $num_points, $col)

Любая

Идентична ImagePolygon, но многоугольник заполняется
цветом $col

ImageRectangle
($im, $x1, $y1, $x2, $y2, $col)

Любая

На изображении $im рисует прямоугольник,
верхний левый угол которого имеет координаты ($x0, $y0) , а правый
нижний ($x1, $y1). $col – цвет прямоугольника.

ImageFilledRectangle
($im, $x1, $y1, $x2, $y2, $col)

Любая

Идентична ImageRectangle, но прямоугольник
заполняется цветом $col

ImageSetStyle
($im, $style)
ImageSetBrush ($im, $brush)

2.0.2

Эти функции позволяют изменить стиль
прочерчиваемых линий. Для более подробной информации посмотрите
официальную документацию, особенно обратите внимание на пример
использования функции ImageSetStyle , который также является
показательным для функции ImageSetBrush

ImageSetPixel
($im, $x, $y, $col)

Любая

В изображении $im рисует точку с координатами
($x,$y) и цветом $col

ImageString
($im, $font, $x, $y, $text, $col)

Любая

В изображении $im создает строку $text с
координатами (левый верхний угол) ($x,$y) цвета $col $font -
размер (гарнитура) шрифта (от 0 до 5)

ImageStringUp
($im, $font, $x, $y, $text, $col)

Любая

Идентична 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='красный квадрат' />

Результат:
Красный квадрат на PHP

Направление: