![]() |
Далеко не всегда графика на веб-ресурсе используется исключительно для придания ему уникального внешнего вида. Зачастую у разработчика возникает необходимость использовать графические представления для наглядного отображения приводимых на сайте данных, показывать в материалах сайта динамически изменяемые в зависимости от каких-либо условий или поведения и запросов пользователя иллюстрации, защищать формы для отправки данных на сервер графическим подтверждением, изменяющимся при каждом обращении к форме. Обычными картинками, созданными в любом графическом редакторе, тут не обойтись – и на помощь приходит PHP с его мощными средствами работы с изображениями.
Для создания и всевозможных манипуляций с изображениями форматов jpeg, png, tiff, gif вам понадобится библиотека gd_library*. Начиная с версии PHP 4.3 эта библиотека является встроенной.
Вам необходимо установить или перекомпилировать PHP с указанием --with-gd. Для пользователей Windows необходимо в файле php.ini указать расширение extension=php_gd2.dll.
Gd-library – это open-source (проект с открытым кодом), работа над новыми версиями ведется постоянно. Получить свежайший релиз библиотеки возможно на официальном сайте /redir.php?url=www.libgd.org%2F%3C%2Fa%3E%2C там же доступна и подробная документация по работе с функциями.
При работе с изображениями разработчику может понадобиться поддержка дополнительных шрифтов и форматов – имеются специальные расширения библиотеки gd для работы с форматами gif, xpm и другими, а также для установки дополнительных шрифтов.
Рассмотрим основные функции, позволяющие создавать, модифицировать и выводить в браузер изображения.
Функции для создания изображений из уже существующих:
Основные функции для работы с графикойImagecreatefromgif(), imagecreatefrompng(), imagecreatefromjpeg() и подобные, принимая в качестве аргумента url или путь к файлу изображения, возвращают идентификатор, представляющий данное изображение.
Например: $image = imagecreatefromgif(‘path/to/your/image.gif’) вернет идентификатор картинки image.gif, посредством которого в последствии можно модифицировать изображение, выводить на него текст, комбинировать его с другими изображениями. В случае неудачи выполнения функции этого типа возвращают false, то есть проверить и обработать неудачу легко можно, сделав проверку типа:
if (!$image = @imagecreatefromgif(‘path/to/your/image.gif’))
{
//код, который необходимо выполнить, в случае если изображение открыто не было.
}
Функции для создания нового изображения:
Imagecreatetruecolor(), imagecreate() создают пустые изображения, принимая в качестве параметра ширину и высоту создаваемого изображения в пикселях. Таким образом, если в предыдущем примере нам не удалось создать идентификатор уже существующего изображения, мы может создать новое изображение.
if (!$image = @imagecreatefromgif(‘path/to/your/image.gif’))
{
$image = imagecreatetruecolor(88, 31); //если не было создано изображение на основе image.gif, мы создаем новую картинку размером 88 на 31 пикселей.
}
Функции для работы с цветами:
Imagecolorallocate() – принимая в качестве аргументов идентификатор изображения и три компоненты нужного цвета (RGB: красную, зеленую и синюю составляющую), определяет нужный цвет для данного изображения.
В нашем примере определим цвета фона и шрифта для вывода текста:
$fontcolor = imagecolorallocate($image, 0, 0, 0);
$backgroundcolor = imagecolorallocate($image, 255, 255, 255);
Функции заливки изображения цветом:
Imagefill(), imagefilledrectangle(), imagefilledarch(), imagefilledellipse() и прочие imagefill… функции, принимая в качестве аргументов координаты геометрических фигур на изображении, обеспечивают заливку этих частей картинки указанным цветом. К примеру, зальем наш прямоуголник цветом фона:
imagefill($image, 0, 0, $backgroundcolor); //здесь 0, 0 – это координаты левого верхнего угла заливаемой площади.
Функции для вывода текста:
Imagestring(), imagettftext(), imagestringup() выводят на изображении текст в различных направлениях, используя различные шрифты.
Например,
imagestring($image, 5, 0, 0, ‘text’, $fontcolor); //выводим слово text на наше изображение $image встроенным шрифтом по координатам (верхняя левая точка) 0, 0.
Кроме встроенных шрифтов вы можете использовать зарегистрированные посредством функции imageloadfont() шрифты. Функция imagettftext() позволяет использовать шрифты типа true type.
![]() |
Сервис отсчета времени />позволяет продемонстрировать работу основных функций gd |
На этой стадии у вас может возникнуть проблема с выводом текста на русском языке – встроенные шрифты (для функции imagestring() 1-5 в зависимости от размера) не поддерживают кириллицу, и даже при указании своего шрифта функции imagettftext() кириллица может выводиться в неверной кодировке.
Есть несколько способов решения этой проблемы. Самый простой – конвертировать строку с символами кириллицы в кодировку UTF-8:
$text = iconv("windows-1251", "UTF-8", «наш текст»);
Также нам может помочь загрузка своего шрифта, например, формата .phpfont посредством imageloadfont(). Такой шрифт может быть создан в специальном редакторе и будет поддерживать все необходимые вам символы, в том числе и русские буквы. Благодаря этой возможности вы также можете использовать нестандартные шрифты – все, на какие способно ваше воображение.
Слияние изображений:
Imagecopymerge(), imagecopy(), imagecopymergegray(), imagecopyresampled(), imagecopyresized(). Функции gd_library могут также управляться не с одним, а с несколькими изображениями. Например, функция imagecopy() позволяет наложить одно изображение на другое по точно указанным координатам. Эта возможность широко используется в популярном сейчас сервисе отсчета времени на графическом измерителе (линейки отсчета времени metric): суть отсчета заключается в том, что координаты расположения бегунка на измерителе определяются в зависимости от количества прошедших дней/месяцев/лет с момента начала отсчета.
Напрмер:
imagecopy (resource $image, resource $another_image, int x_координата_назначения, int y_координата_назначения, int x_координата_источника, int y_координата_источника, int ширина_копируемого_изображения, int высота_копируемого_изображения).
Добавление специальных эффектов:
Множество функций gd_library позволяют добавлять специальные эффекты на текущее изображение, рисовать на нем новые объекты, выделять определенные области и прочее. Приведем всего несколько примеров:
- функция imagedashedline() – рисует пунктирную линию;
- функция imageellipse() – рисует эллипс;
- функция imagesetbrush() – создает кисть;
- функция imagefilter() – применяет изображению определенный фильтр, например инвертирует цвета изображения, переводит изображение в черно-белый режим, изменяет яркость, контраст изображения, добавляет фаску и прочее.
Выдача полученного изображения пользователю:
Функции вида imagegif(), imagepng(), imagejpeg() выводят полученный результат в браузер или в файл. Не забудьте, что заголовок Content-Type для таких скриптов должен быть переопределен:
Пример использования функций GD-библиотекиheader("Content-type: image/gif");
imagegif($image);
Доведем наш пример до логического завершения. Предположим, нашей целью было создание так называемой капчи (captcha), то есть картинки, на которой при каждом обращении к странице будет демонстрироваться новая последовательность из символов – например, четырехзначное число.
![]() |
Приведенный пример создания изображения можно усложнить: добавить тень, фильтры, наклон, заменить цифры на буквы |
<?php
//пробуем создать капчу из картинки с каким-нибудь «шумным» фоном:
if (!$image = @imagecreatefromgif(‘path/to/your/image.gif’))
{
//если не было создано изображение на основе image.gif, мы создаем новую картинку размером 88 на 31 пикселей
$image = imagecreatetruecolor(88, 31);
//определяем цвет фона:
$backgroundcolor = imagecolorallocate($image, 255, 255, 255);
//заливаем полученное изображение выбранным цветом:
imagefill($image, 0, 0, $backgroundcolor);
}
//определяем цвет шрифта:
$fontcolor = imagecolorallocate($image, 0, 0, 0);
//создаем случайное четырехзначное число:
$text = mt_rand(1000, 9999);
//выводим число на картинку:
imagestring($image, 5, 0, 0, ‘text’, $fontcolor);
//и выдаем полученный результат пользователю:
header("Content-type: image/gif");
imagegif($image);
?>
Данный скрипт всегда можно усложнить, например, добавив угол наклона для надписи, тень от цифр, применив фильтры к полученному изображению.
Работа с фотографиями:
Работа с мета-данными цифровых фотографийРасширение exif* позволяет работать с информацией, хранящейся в заголовках цифровых фотографий. Для работы с функциями данного расширения нет необходимости ни в каких дополнительных библиотеках, PHP просто должен быть установлен с поддержкой --enable-exif. Для пользователей Windows: в файле php.ini должны быть указаны расширения extension=php_mbstring.dll и extension=php_exif.dll, притом mbstring обязательно должен быть указан первым.
Функция exif_imagetype(), принимая в качестве аргумента путь к файлу, позволяет определить формат изображения. Это необходимо для того, чтобы не применять другие функции exif к изображениям неподдерживаемых форматов. Формат изображения для последующей работы с данными функциями должен быть gif, jpeg, png, swf, psd, bmp, tiff_II, tiff_MM, jpc, jp2, jpx, jb2, swc, iff, wbmp, xbm.
Функция exif_read_data() считывает exif-заголовки из файлов формата jpeg и tiff.
Например:
![]() |
Такую информацию можно получить о цифровом фото средствами exif |
<?php
//проверяем, действительно ли формат данного изображения jpeg
if (exif_imagetype(‘image.jpeg’) == IMAGETYPE_JPEG)
{
//считываем заголовки
$imagedata = exif_read_data(‘image.jpeg’, 0, true);
if ($imagedata === false)
echo “No headers”; //если заголовки отсутствуют
else
{
//выводим массив заголовков по секциям
foreach ($imagedata as $key => $section)
{
foreach ($section as $name => $value)
echo “$key.$name : $value”;
}
}
}
else
echo “Non supported format”;
?>
В этой статье описаны возможности применения лишь некоторых функций — как gd_library, так и exif-extension. Более подробную информацию обо всех доступных функциях работы с изображениями в PHP можно найти на страницах официального сайта в разделе Image Functions и Exif Functions.
Ссылки по теме
- php.net — работа с изображениями
- php.net — работа с мета-данными цифровых фото
- GD library — официальный сайт
Статья получена: hostinfo.ru