Приветствую Вас Гость | RSS
Понедельник
24.06.2024, 16:18
Мой сайт
Главная Регистрация Вход
Меню сайта

Мини-чат

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » 2013 » Июль » 6 » Графика в PHP (как делаются линеечки-метрики)
00:47
 

Графика в PHP (как делаются линеечки-метрики)

Использование php для графики

Далеко не всегда графика на веб-ресурсе используется исключительно для придания ему уникального внешнего вида. Зачастую у разработчика возникает необходимость использовать графические представления для наглядного отображения приводимых на сайте данных, показывать в материалах сайта динамически изменяемые в зависимости от каких-либо условий или поведения и запросов пользователя иллюстрации, защищать формы для отправки данных на сервер графическим подтверждением, изменяюшимся при каждом обращении к форме. Обычными картинками, созданными в любом графическом редакторе, тут не обойтись - и на помощь приходит PHP с его мощными средствами работы с изображениями.

Для создания и всевозможных манипуляций с изображениями форматов jpeg, png, tiff, gif вам понадобится библиотека gd_library. Начиная с версии PHP 4.3 эта библиотека является встроенной. Вам необходимо установить или перекомпилировать PHP с указанием --with-gd. Для пользователей Windows необходимо в файле php.ini указать расширение extension=php_gd2.dll.

Gd-library - это open-source (проект с открытым кодом), работа над новыми версиями ведется постоянно. Получить свежайший релиз библиотеки возможно на официальном сайте , там же доступна и подробная документация по работе с функциями.

При работе с изображениями разработчику может понадобиться поддержка дополнительных шрифтов и форматов - имеются специальные расширения библиотеки 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.

Использование php для создание линеек метрик отсчета времениНа этой стадии у вас может возникнуть проблема с выводом текста на русском языке - встроенные шрифты (для функции 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 для таких скриптов должен быть переопределен:

header("Content-type: image/gif");
imagegif($image);

Доведем наш пример до логического завершения. Предположим, нашей целью было создание так называемой капчи (captcha), то есть картинки, на которой при каждом обращении к странице будет демонстрироваться новая последовательность из символов - например, четырхзначное число.

Приведенный пример создания изображения можно усложнить: добавить тень, фильтры, наклон, заменить цифры на буквы
//пробуем создать капчу из картинки с каким-нибудь "шумным" фоном:
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
//проверяем, действительно ли формат данного изображения 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 можно найти на страницах официального сайта, в разделе .

Angie D. Walker

Статья написана для издательства , все права на эту статью принадлежат издетальству. Перепечатка и любое использование материала категорически запрещаются.
Просмотров: 362 | Добавил: laustiona | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск

Календарь
«  Июль 2013  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024
    Конструктор сайтов - uCoz