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='красный квадрат' />
Результат:
Список всех функций библиотеки 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