Работа с графическими библиотеками Лекция 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 для загрузки файлов.