Графическая библиотека РНР предназначена для генерации изображений в форматах GIF, PNG, JPEG и др.
JPEG. Идеален для фотографий, но сжатие изображения происходит с потерями качества, так что этот формат совершенно не подходит для хранения различных диаграмм и графиков.
GIF. Позволяет достичь довольно хорошего соотношения размер/качество, в то же время не искажая изображение; применяется в основном для хранения небольших точечных рисунков и диаграмм.
PNG. Сочетает в себе хорошие стороны как JPEG, так и GIF, но в настоящий момент ему почему-то не выражают особого доверия — скорее, по историческим причинам, из-за нежелания отказываться от GIF и т. д.
Подключение графической библиотеки
Для работы с графической библиотекой надо подключить необходимые расширения. В первую очередь, это библиотека gd2
. Для чтения метаданных из файлов фотографий, сделанных цифровой камерой используется функция из библиотеки exif
. При работе с графикой может потребоваться еще и библиотека mbstring
, которая представляет специальные функции для работы со строками в многобайтовых кодировках. Эти библиотеки должны быть указаны в файле php.ini
:
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_gd2.dll
Посмотреть, поддерживается ли графическая библиотека, можно, вызвав функцию phpinfo()
и найдя в ней раздел gd
.
Все функции, которые необходимы для создания динамических изображений, будут условно разбиты на восемь разделов:
- информационные функции;
- функции создания изображений;
- функции сохранения и вывода изображений;
- функции преобразования изображений;
- функции для работы с цветом;
- функции рисования;
- функции настройки рисования;
- функции для работы с текстом.
Примечание. При работе с функциями GDLib следует учитывать, что координаты абсцисс X и Y отсчитываются, как это принято в большинстве графических систем (из левого верхнего угла), а не вдекартовой системе координат (из левого нижнего угла).
Информационные функции
Информационные функции предоставляют информацию о текущей версии библиотеки, а также параметры изображений. В таблице приводится список функций относящихся к этой группе.
Функция | Описание |
---|---|
gd_info() | Возвращает ассоциированный массив с информацией об установленной библиотеке GD |
exif_imagetype($filename) | Читает несколько первых байтов файла $filename и определяет формат изображения |
exif_read_data($filename [, $sections [, $arrays, [, $thumbnail]]]) | Читает заголовки файлов форматов JPEG и TIFF и возвращает ассоциированный массив со свойствами секций этого файла |
exif_thumbnail($filename [, &$width [, &$height [, &$imagetype]]]) | Возвращает встроенные эскизы (уменьшенные изображения) файлов форматов JPEG и TIFF |
getimagesize($filename [, &$imageinfo]) | Возвращает размер в пикселях и тип файла $filename, кроме того, может возвращать дополнительную информацию об изображении в дополнительном параметре $imageinfo |
imagesx($image) | Возвращает ширину изображения в пикселях. В качестве параметра $image функция принимает дескриптор открытого изображения. |
imagesy($image) | Возвращает высоту изображения в пикселях. В качестве параметра $image функция принимает дескриптор открытого изображения |
image_type_to_mime_type ($imagetype) | Определяет MIME-типы для констант imagetype, возвращаемых функциями getimagesize(), exif_read_data(), exif_thumbnail(), exif_imagetype() |
imagetypes() | Возвращает битовое поле, соответствующее форматом изображений, которые поддерживаются текущей реазизацией РНР и билиотеки GD. Возвращаемое битовое поле может содержать следующие биты: IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP |
Рассмотрим более подробно наиболее часто используемые из таблицы функции.
Текущая версия библиотеки GDLib
Функция gd_info()
возвращает ассоциированный массив, элементы которого позволяют определить версию библиотеки, а также поддерживающие форматы.
Вызов функции gd_info():
<?php
$arr = gd_info();
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
В результате работы скрипта вернулась следующая информация:
Первый элемент массива GD Version сообщает о том, текущей является версия 2.0.34. Элементы возвращаемого функцией gd_info()
массива описываются в таблице.
Элемент | Описание |
---|---|
GD Version | Версия библиотеки GD |
FreeType Support | Возвращает true, если установлена поддержка шрифтов Freetype |
FreeType Linkage | Описывает, каким образом включена поддержка шрифтов Freetype. Возможны следующие значения: 'with freetype', with TTF library', with unknown library'. Этот параметр существует, только если Freetype Support = true |
T1Lib Support | Возвращает true, если включена поддержка шрифтов PostScript Type1 |
GIF Read Support | Возвращает true, если если включена поддержка чтения файлов формата GIF |
GIF Create Support | Возвращает true, если включена возможность создания изображений в формате GIF |
JPG Support | Возвращает true, если если включена поддержка формата JPEG |
PNG Support | Возвращает true, если если включена поддержка формата PNG |
WBMP Support | Возвращает true, если если включена поддержка формата WBMP |
XPM Support | Возвращает true, если если включена поддержка формата XPM |
JIS-mapped Japanese Font Support | Возвращает true, если если включена поддержка японских иероглифов |
Примечание. О параметрах библиотеки GDLib можно узнать также из отчета функции phpinfo()
.
Формат файла
Определить формат файла позволяет функция exit_imagetype()
, которая читает несколько первых байтов файла и определяет формат изображения. Если формат определен, то возвращается константа, соответствующая типу файла, в противном случае возвращается false
.
Возвращаемое значение | Соответствующая значению константа |
---|---|
1 | IMAGETYPE_GIF |
2 | IMAGETYPE_JPEG |
3 | IMAGETYPE_PNG |
4 | IMAGETYPE_SWF |
5 | IMAGETYPE_PSD |
6 | IMAGETYPE_BMP |
7 | IMAGETYPE_TIFF_II |
8 | IMAGETYPE_TIFF_MM |
9 | IMAGETYPE_JPC |
10 | IMAGETYPE_JP2 |
11 | IMAGETYPE_JPX |
12 | IMAGETYPE_JB2 |
13 | IMAGETYPE_SWC |
14 | IMAGETYPE_IFF |
15 | IMAGETYPE_WBMP |
16 | IMAGETYPE_XBM |
Размер файла
Для получения размера файла предназначена функция getimagesize()
, которая принимает в качестве первого параметра путь к файлу (допускается в том числе и сетевой путь, начинающийся с http://) и возвращает массив из четырех элементов: ширину изображения, высоту изображения, одно из значений представленных в предыдущей таблице, и строку формата "width = x height = y"
, которая может быть использована в HTML-теге <IMG>
(вывод изображения). Для изображений формата JPEG возвращается три дополнительных элемента: chenel, bits, mime
. Элемент chenel содержит значение 3 для RGB-изображений и 4 для CMYK-изображений ; bits — количество бит для каждого из цветов; mime возвращает MIME-тип файла, например, для JPEG-файлов будет возвращаться строка "image/jpeg".
Использование функции getimagesize():
<?php
list($width, $height) = getimagesize("images/100-IMGA0390.JPG");
echo "<img src= images/100-IMGA0390.JPG width=$width height=$height>";
?>
В приведенном примере, размеры изображения определяются автоматически при помощи функции getimagesize()
и подставляются в HTML-тег <IMG>. А теперь рассмотрим альтернативный вариант, в котором для указания размера изображения используется четвертый элемент массива, возвращаемого функцией getimagesize()
.
Альтернативный способ указания размера в HTML-теге <IMG>
<?php
list($width, $height, $type, $size)=getimagesize("images/100-IMGA0390.JPG");
echo "<img src=images/100-IMGA0390.JPG $size";
?>
Как будет показано ниже, основная часть функций библиотеки GDLib работает с изображениями по схеме, напоминающей схему работы с файлами. Изображение открывается при помощи одной из функций открытия, которые возвращают дескриптор изображения. Этот дескриптор передается всем функциям, которые осуществляют манипуляции с изображением (при помощи дескрипторов одно открытое изображение отличается от другого). После завершения всех операций изображение закрывается. При работе в таком режите более удобными являются функции imagesx()
и imagesy()
, возвращающие соответственно высоту и ширину изображения. Однако в отличии от функции getimagesize(), в качестве параметра эти функции принимают не имя файла, а дескриптор открытого изображения.
Получение MIME-типа файла
Аббревиатура MIME дословно расшифровывается как Multiporpose Internet Mail Extensions (Многоцелевые Расширения Электронной Почты). Это расширение было введено для обозначения форматов файлов, которые прикрепляются в качестве вложения к электронным письмам. В разных средах это позволяет автоматически подбирать предложения, которые способны адекватно открывать такой файл.
В настоящее время MIME-типы используются не только в почте, но в веб-среде. Так, при отправке любого документа с сервера MIME-тип передается в HTML-заголовке Content_Type. Это позволяет браузеру клиента правильно работать с текстом, HTML-страницами, графикой, музыкальными и видеофайлами. Например, для HTML-страниц посылается MIME-тип text/html, который сообщает браузеру, что ему пересылается HTML-страница для интерпретации. Однако если послать MIME-тип text/plain, соответствующий обычному тексту, браузер вместо интерпретации отобразит HTML-код страницы как есть.
Строка с MIME-типом состоит из двух частей: идентификатора типа и идентификатора подтипа, разделенных косой чертой /. Так для текстовой информации идентификатор типа принимает значение text, a идентификатор подтипа может принять два значения: html и plain. Для изображений идентификатор типа принимает значение image, а идентификатор подтипа расшифровывает формат файла:
image/gif
— изображение в формате GIF;image/jpeg
— изображение в формате JPEG;image/png
—изображение в формате PNG.
Запоминать значения MIME-типов необязательно, их всегда можно получить автоматически. Функция image_type_to_mime_type()
принимает в качестве параметра значение константы и возвращает соответствующий ей MIME-тип.
Получение MIME-типа изображения:
<?php
list($width, $height, $type)=getimagesize("images/100-IMGA0390.JPG");
echo image_type_to_mime_type($type); //возвращает image/jpeg
?>
При использовании функции getimagesize()
для получения MIME-типа можно воспользоваться элементом mime возвращаемого массива.
Получение MIME-типа изображения с помощьюэлемента mime:
<?php
$arr=getimagesize("images/100-IMGA0390.JPG");
echo $arr['mime']; //возвращает image/jpeg
?>
В таблице приведены принимаемые функцией image_type_to_mime_type()
значения и возвращаемые ею MIME-типы.
Константа | Числовое значение | MIME-тип |
---|---|---|
IMAGETYPE_GIF | 1 | image/gif |
IMAGETYPE_JPEG | 2 | image/jpeg |
IMAGETYPE_PNG | 3 | image/png |
IMAGETYPE_SWF | 4 | application/x-shockwave-flash |
IMAGETYPE_PSD | 5 | image/pcd |
IMAGETYPE_BMP | 6 | image/bmp |
IMAGETYPE_TIFF_II | 7 | image/tiff |
IMAGETYPE_TIFF_MM | 8 | image/tiff |
IMAGETYPE_JPC | 9 | application/octet-stream |
IMAGETYPE_JP2 | 10 | image/jp2 |
IMAGETYPE_JPX | 11 | application/octet-stream |
IMAGETYPE_JB2 | 12 | application/octet-stream |
IMAGETYPE_SWC | 13 | application/x-shockwave-flash |
IMAGETYPE_IFF | 14 | image/iff |
IMAGETYPE_WBMP | 15 | image/vnd.wap.wbmp |
IMAGETYPE_XBM | 16 | image/xbm |
MIME-типы часто используются для отправки изображений в среде веб. Рассмотрим пример, где скрипт, передает изображение в окно браузера без использования HTML-тега <IMG>
. Если перед телом изображения не отправлять HTML-заголовок Content-Type с соответствующим MIME-типом вместо изображения, браузер попытается вывести бинарное содержимое файла.
Вывод изображения без использования HTML-тега <IMG>
:
<?php
list($width, $height, $type)=getimagesize("images/100-IMGA0390.JPG");
//Отправляем HTTP-заголовок Content-type
$header="Content-type: ".image_type_to_mime_type($type);
header($header);
//Отправляем размер файла
$header="Content-type: ". filesize("images/100-IMGA0390.JPG");
header($header);
//Отправляем содержимое файла
echo file_get_contents("images/100-IMGA0390.JPG");
?>
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться