Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » Графика средствами PHP

 

Графика средствами PHP

 

 

PHP, gd_library, exif-extension

Далеко не всегда графика на веб-ресурсе используется исключительно для придания ему уникального внешнего вида. Зачастую у разработчика возникает необходимость использовать графические представления для наглядного отображения приводимых на сайте данных, показывать в материалах сайта динамически изменяемые в зависимости от каких-либо условий или поведения и запросов пользователя иллюстрации, защищать формы для отправки данных на сервер графическим подтверждением, изменяющимся при каждом обращении к форме. Обычными картинками, созданными в любом графическом редакторе, тут не обойтись – и на помощь приходит 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), то есть картинки, на которой при каждом обращении к странице будет демонстрироваться новая последовательность из символов – например, четырехзначное число.

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.

Ссылки по теме




Статья получена: hostinfo.ru
загрузка...

 

 

Наверх


Постоянная ссылка на статью "Графика средствами PHP":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

Ваш комментарий

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

Skoda Octavia Tour: Средство от жадности

В тесте участвуют автомобили: Skoda Octavia Tour Посмотреть другие фото (5) Рост цен на топливо в последнее время стал таким же привычным, как осенние дожди или снег зимой. А потому многие, казалось бы, должны обратить внимание на дизельные модели.

» Немецкие автомобили - 4531 - читать


Citroen C2: Средство от комплексов

В тесте участвуют автомобили: Citroen C2 CITROЁN C2: "женский" автомобиль для любого пола Как только эта «трехдверка» появилась на наших дорогах, ее тотчас традиционно окрестили «женским» автомобилем. Да, машина не вышла ростом, но это не повод списывать С2 со счетов, адресуя его лишь слабому полу.

» Французские автомобили - 1828 - читать


Автомобиль как средство размножения

Секс в автомобиле. Почти экстремальное удовольствие, которое не получал разве что ленивый автовладелец. Психологи единодушны: люди предаются плотским утехам в салоне авто ради новых ощущений.

» Разное - 1865 - читать


ПДД. Буксировка механических транспортных средств

20. 1. Буксировка на жесткой или гибкой сцепке должна осуществляться только при наличии водителя за рулем буксируемого транспортного средства, кроме случаев, когда конструкция жесткой сцепки обеспечивает при прямолинейном движении следование буксируемого транспортного средства по траектории буксирующего.

» Разное - 2590 - читать


ПДД. Приоритет маршрутных транспортных средств

18. 1. Вне перекрестка, где трамвайные пути пересекают проезжую часть, трамвай имеет преимущество перед безрельсовыми транспортными средствами, кроме случаев выезда из депо.

» Разное - 2158 - читать



Статья на тему Интернет » Интересное в сети » Графика средствами PHP

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия Art.Thelib.Ru