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

Список всех функций библиотеки GD

  • gd_info — Вывод информации о текущей установленной GD библиотеке
  • getimagesize — Получение размера изображения
  • getimagesizefromstring — Получение размера изображения из строки данных
  • image_type_to_extension — Получение расширения файла для типа изображения
  • image_type_to_mime_type — Получение Mime-типа для типа изображения
  • image2wbmp — Выводит изображение в браузер или пишет в файл
  • imageaffine — Возвращает аффинно преобразованное изображение
  • imageaffinematrixconcat — Объединение двух матриц
  • imageaffinematrixget — Возвращает аффинно преобразованное изображение
  • imagealphablending — Задание режима сопряжения цветов для изображения
  • imageantialias — Требуется ли применять функции сглаживания или нет
  • imagearc — Рисование дуги
  • imagechar — Рисование символа по горизонтали
  • imagecharup — Рисование символа вертикально
  • imagecolorallocate — Создание цвета для изображения
  • imagecolorallocatealpha — Создание цвета для изображения
  • imagecolorat — Получение индекса цвета пиксела
  • imagecolorclosest — Получение индекса цвета ближайшего к заданному
  • imagecolorclosestalpha — Получение индекса цвета ближайшего к заданному с учетом прозрачности
  • imagecolorclosesthwb — Получение индекса цвета, имеющего заданный тон, белизну и затемнение
  • imagecolordeallocate — Разрыв ассоциации переменной с цветом для заданного изображения
  • imagecolorexact — Получение индекса заданного цвета
  • imagecolorexactalpha — Получение индекса заданного цвета и альфа компонента
  • imagecolormatch — Делает цвета палитровой версии изображения более соответствующими truecolor версии
  • imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
  • imagecolorresolvealpha — Получает идентификатор конкретного цвета и альфа компонента или его ближайший аналог
  • imagecolorset — Установка набора цветов для заданного индекса палитры
  • imagecolorsforindex — Получение цветов, соответствующих индексу
  • imagecolorstotal — Определение количества цветов в палитре изображения
  • imagecolortransparent — Определяет цвет как прозрачный
  • imageconvolution — Наложение искривляющей матрицы 3х3, используя коэффициент и смещение
  • imagecopy — Копирование части изображения
  • imagecopymerge — Копирует часть изображения с наложением
  • imagecopymergegray — Копирует часть изображения с наложением в градациях серого
  • imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
  • imagecopyresized — Копирование и изменение размера части изображения
  • imagecreate — Создание нового палитрового изображения
  • imagecreatefromgd2 — Создание нового изображения на основе GD2 или URL
  • imagecreatefromgd2part — Создание нового изображения на основе части GD2 файла или URL
  • imagecreatefromgd — Создание нового изображения на основе GD файла или URL
  • imagecreatefromgif — Создает новое изображение из файла или URL
  • imagecreatefromjpeg — Создает новое изображение из файла или URL
  • imagecreatefrompng — Создает новое изображение из файла или URL
  • imagecreatefromstring — Создание нового изображения из потока представленного строкой
  • imagecreatefromwbmp — Создает новое изображение из файла или URL
  • imagecreatefromwebp — Создает новое изображение из файла или URL
  • imagecreatefromxbm — Создает новое изображение из файла или URL
  • imagecreatefromxpm — Создает новое изображение из файла или URL
  • imagecreatetruecolor — Создание нового полноцветного изображения
  • imagecrop — Crop an image using the given coordinates and size, x, y, width and height
  • imagecropauto — Crop an image automatically using one of the available modes
  • imagedashedline — Рисование пунктирной линии
  • imagedestroy — Уничтожение изображения
  • imageellipse — Рисование эллипса
  • imagefill — Заливка
  • imagefilledarc — Рисование и заливка дуги
  • imagefilledellipse — Рисование закрашенного эллипса
  • imagefilledpolygon — Рисование закрашенного многоугольника
  • imagefilledrectangle — Рисование закрашенного прямоугольника
  • imagefilltoborder — Заливка цветом
  • imagefilter — Применяет фильтр к изображению
  • imageflip — Flips an image using a given mode
  • imagefontheight — Получение высоты шрифта
  • imagefontwidth — Получение ширины шрифта
  • imageftbbox — Определение границ текста выводимого шрифтом freetype2
  • imagefttext — Нанесение текста на изображение, используя шрифты FreeType 2
  • imagegammacorrect — Применение гамма коррекции к GD изображению
  • imagegd2 — Вывод GD2 изображения в броузер или файл
  • imagegd — Вывод GD-изображения в браузер или в файл
  • imagegif — Выводит изображение в браузер или пишет в файл
  • imagegrabscreen — Захватывает изображение с экрана
  • imagegrabwindow — Захватывает изображение окна
  • imageinterlace — Включение или выключение интерлейсинга
  • imageistruecolor — Определяет, является ли изображение полноцветным
  • imagejpeg — Выводит изображение в браузер или пишет в файл
  • imagelayereffect — Установка флага альфа сопряжения для использования эффектов наложения изображений встроенной libgd библиотеки
  • imageline — Рисование линии
  • imageloadfont — Загрузка шрифта
  • imagepalettecopy — Копирование палитры из одного изображения в другое
  • imagepalettetotruecolor — Конвертирует изображение с базовой палитры в true color
  • imagepng — Вывод PNG изображения в броузер или файл
  • imagepolygon — Рисование многоугольника
  • imagepsbbox — Выдает параметры рамки, обрамляющей текст написанный шрифтом PostScript Type1
  • imagepsencodefont — Изменение вектора кодировки шрифта
  • imagepsextendfont — Растягивание или сжатие шрифта
  • imagepsfreefont — Освобождение памяти, занятой шрифтом PostScript Type
  • imagepsloadfont — Загрузка шрифта PostScript Type 1 из файла
  • imagepsslantfont — Наклон шрифта
  • imagepstext — Рисование текста поверх изображения, используя шрифты PostScript Type1
  • imagerectangle — Рисование прямоугольника
  • imagerotate — Поворот изображения с заданным углом
  • imagesavealpha — Установка флага сохранения всей информации альфа компонента и сохранение PNG изображения
  • imagescale — Масштабирует изображение
  • imagesetbrush — Установка изображения (кисти), посредством которого будут рисоваться линии
  • imagesetinterpolation — Устанавливает метод интерполяции
  • imagesetpixel — Рисование точки
  • imagesetstyle — Установка стиля рисования линий
  • imagesetthickness — Установка толщины линий
  • imagesettile — Установка изображения, которое будет использовано в качестве элемента мозаичной заливки
  • imagestring — Рисование строки текста горизонтально
  • imagestringup — Рисование строки текста вертикально
  • imagesx — Получение ширины изображения
  • imagesy — Получение высоты изображения
  • imagetruecolortopalette — Преобразование полноцветного изображения в палитровое
  • imagettfbbox — Получение параметров рамки обрамляющей текст написанный TrueType шрифтом
  • imagettftext — Рисование текста на изображении шрифтом TrueType
  • imagetypes — Возвращает список типов изображений, поддерживаемых PHP сборкой
  • imagewbmp — Выводит изображение в браузер или пишет в файл
  • imagewebp — Вывод WebP изображения в броузер или файл
  • imagexbm — Вывод XBM изображения в броузер или файл
  • iptcembed — Встраивание двоичных IPTC данных в JPEG изображение
  • iptcparse — Разбор двоичных IPTC данных на отдельные тэги
  • jpeg2wbmp — Конвертирует изображение из формата JPEG в WBMP
  • png2wbmp — Преобразование PNG файла в WBMP
Направление: