image

advertisement
Работа с графическими
библиотеками
Лекция 4
Общие принципы
• Протокол HTTP, как известно, может
возвращать не только HTML-код, но и
двоичные данные, включая графическую
информацию
• Точно также интерпретатор языка PHP
способен динамически генерировать не
только HTML-код, но и изображения.
Графические библиотеки в Web
• GD Graphics Library
• GraphicsMagick
• ImageMagick
Поддерживаемые форматы
графической библиотеки GD
Формат
MIME-тип
GIF
image/gif
JPEG
image/jpeg
PNG
image/png
XPM
image/x-xpixmap
• Вышеперечисленные форматы
поддерживаются «из коробки».
• Благодаря расширениям, могут
поддерживаться и другие форматы: BMP, TIFF,
SWF и др.
Этапы генерации изображения
• Установить тип содержимого как «изображение»,
чтобы браузер смог интерпретировать изображение
должным образом
• Создать новое пустое изображение, установив
нужную ширину и высоту
• Отрисовать необходимые детали изображения
• Сохранить окончательный вариант изображения и
передать его в браузер
• Очистить память, которая использовалась для
создания и хранения изображения
• Организовать отображение рисунка из файла
image.php
Установка HTTP-заголовка
• Для генерирования изображения прямо в
браузер клиента, необходимо в PHPсценарии установить специальный HTTPзаголовок, указывающий на MIME-тип
изображения. Для картинки формата PNG:
header("Content-Type: image/png");
Создание пустого изображения
// Определяем размеры изображения
// 125px ширина (width), 125px высота
(height)
$image = imagecreate(125, 125);
// Альтернатива: полноцветное изображение
$image = imagecreatetruecolor(125, 125);
Идентификатор цвета
Общий вид функции:
int imagecolorallocate(resource $image, int $red, int
$green, int $blue)
• Возвращает идентификатор цвета в соответствии с
заданными RGB компонентами.
• imagecolorallocate() должна вызываться для создания
каждого цвета, который будет использоваться в
изображении $image.
// создадим несколько цветов
// первый определённый цвет будет фоновым,
// если была использована функция imagecreate()
$scarlet = imagecolorallocate($image, 255, 36, 0);
$white
= imagecolorallocate($image, 255, 255, 255);
$black
= imagecolorallocate($image, 0, 0, 0);
Фоновая заливка
bool imagefill (resource $image,
int $x, int $y, int $color)
• Производит заливку монотонной области,
начиная с заданных координат (верхний
левый угол имеет координаты 0, 0), цветом
$color в изображении $image.
Генерация изображения в формате
PNG
bool imagepng(resource $image [, string
$filename [, int $quality]])
• $image – ресурс изображения, полученный
одной из функций создания изображений.
• $filename – путь для сохранения файла. Если
не установлен или равен NULL, изображение
будет выведено в поток вывода в бинарном
виде.
• $quality – степень сжатия: от 0 (нет сжатия) до
9.
Генерация изображения в формате
PNG
// Сохраняем файл в формате PNG и
выводим его в стандартный поток
imagepng($image);
Высвобождение памяти
bool imagedestroy(resource $image)
• Освобождает память, занятую
изображением $image.
• Пример:
// Чистим использованную память
imagedestroy($image);
Вариант тестовой программы
<?php
header("Content-Type: image/png");
// Определяем размеры изображения
// 125px ширина (width), 125px высота (height)
$image = imagecreatetruecolor(125, 125);
// создадим несколько цветов
$scarlet = imagecolorallocate($image, 255, 36, 0);
$white
= imagecolorallocate($image, 255, 255, 255);
$black
= imagecolorallocate($image, 0, 0, 0);
// Заливка фона алым цветом
imagefill($image, 0, 0, $scarlet);
// Сохраняем файл в формате PNG и выводим его
imagepng($image);
// Чистим использованную память
imagedestroy($image);
?>
Работа с текстом
array imagettftext (resource
$image, float $size, float $angle,
int $x, int $y, int $color, string
$fontfile, string $text)
Работа с текстом
array imagettftext (resource $image , float
$size , float $angle , int $x , int $y , int
$color , string $fontfile , string $text)
Наносит текст $text поверх изображения, используя TrueType
шрифт.
• $image – ресурс изображения
• $size – размер шрифта в пунктах (GD2)
• $angle – угол в градусах, 0 градусов означает
расположение текста слева направо. Положительные
значения означают поворот текста против часовой
стрелки.
Работа с текстом
array imagettftext (resource $image , float
$size , float $angle , int $x , int $y , int
$color , string $fontfile , string $text)
Наносит текст $text поверх изображения, используя TrueType
шрифт.
• $x, $y – координаты x и y определяют отправную точку для
первого символа текста (конкретно, левый нижний угол
символа).
• $color – индекс цвета.
• $fontfile – путь к файлу TrueType шрифта.
• $text – текстовая строка в кодировке UTF-8.
Использование текста в графике
<?php
header("Content-type: image/png");
$image = imagecreatetruecolor(190, 190);
$scarlet = imagecolorallocate($image, 255, 36, 0);
$yellow = imagecolorallocate($image, 251, 236, 93);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $scarlet);
// Определим шрифт: Comic Sans Serif
$font = "comic.ttf";
$text = "Доброе утро!";
// Тень
imagettftext($image, 20, -45, 31, 41, $black, $font, $text);
// Текст
imagettftext($image, 20, -45, 30, 40, $yellow, $font, $text);
imagepng($image);
imagedestroy($image);
?>
Использование текста в графике
• Результат:
Создание изображения из файла
resource imagecreatefrompng(string
$filename);
• Возвращает идентификатор изображения,
представляющего изображение полученное
из файла с заданным именем.
Объединение изображений
bool imagecopy
( resource $dst_im , resource $src_im , int $dst_
x , int $dst_y , int $src_x , int $src_y , int $src_w ,
int $src_h );
• Копирует часть src_im в dst_im, начиная с
координат x, y src_x, src_y с
шириной src_w и высотой src_h.
Скопированная часть помещается на
координаты dst_x и dst_y.
Объединение изображений с
наложением
bool imagecopymerge
( resource $dst_im , resource $src_im , int $dst_
x , int $dst_y , int $src_x , int $src_y , int$src_w ,
int $src_h , int $pct );
• Копирует часть src_im и помещает
скопированное на dst_im, начиная с
координат src_x, src_y с шириной src_w и
высотой src_h. Скопированная часть
помещается на координаты dst_x и dst_y.
Отражение изображений
bool imageflip(resource $image, int
$mode);
• Отражает изображение согласно параметру
mode:
IMG_FLIP_HORIZONTAL Отразить горизонтально
IMG_FLIP_VERTICAL
Отразить вертикально
IMG_FLIP_BOTH
Отразить по обеим осям
Поворот изображений
resource imagerotate(resource $image , float $angle ,
int $bgd_color [, int $ignore_transparent = 0 ] );
• Поворот изображения image на заданный угол angle в
градусах.
• Центром поворота является центр изображения.
Поворачиваемое изображение может отличаться
размером от оригинала.
• bgd_color - Цвет фона свободной зоны после поворота.
• ignore_transparent - Если установлено и не равно нулю,
прозрачность игнорируются (иначе сохраняется).
Полезные ссылки
• http://php.net/manual/ru/book.image.php
• http://www.php.su/functions/?cat=image
• http://ruseller.com/lessons.php?rub=37&id=4
39
Лабораторная работа
• Нарисовать цифровые часы
• Создать водяной знак и наложить на загружаемые
изображения
• Добавить CAPTCHA для загрузки файлов.
Download