Работа с изображениями. Подключение графической библиотеки

Графическая библиотека РНР предназначена для генерации изображений в форматах GIF, PNG, JPEG и др.

Подключение графической библиотеки

Для работы с графической библиотекой надо подключить необходимые расширения. В первую очередь, это библиотека 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, а идентификатор подтипа расшифровывает формат файла:

Запоминать значения 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-типы.

Соответствие констант GDLib и 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");
?>




  • Другие |
назадвверхвперед
Rambler's Top100