Московский Государственный Технический Университет

имени Н.Э.Баумана

Кафедра САПР


Графика в PHP

Федорук В.Г.
Содержание

Для создания графических изображений "на лету" в PHP обычно используются средства растровой графической библиотеки GD ( http://www.boutell.com/gd). Ниже дается пример простой PHP-программы, динамически генерирующей нетривиальный образ.

<?php
header("Content-type: image/png");
$img = @imagecreate(200, 200)
    or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($img, 255, 255, 255);
$square_color = imagecolorallocate($img, 0, 0, 0);
$text_color = imagecolorallocate($img, 233, 14, 91);
imagerectangle ($img, 0, 0, 199, 199, $square_color);
imagefilledrectangle ($img, 50, 50, 150, 150, $square_color);
imagestring($img, 5, 46, 15,  "Black square", $text_color);
imagepng($img);
imagedestroy($img);
?>

Основными особенностями библиотеки GD являются следующие.

Ниже описываются некоторые наиболее употребимые функции библиотеки GD.

Создание и удаление изображения

resourse imagecreate (int x_size, int y_size)
создает основанный на цветовой палитре пустой образ размером x_size на y_size пикселей. Для оперирования цветом пикселей такого образа используются индексы цветовой палитры.

resourse imagecreatetruecolor (int x_size, int y_size)
создает "черный" образ размером x_size на y_size пикселей. Для оперирования цветом пикселей такого образа используются индексы цветовой палитры.

resourse imagecreatefrompng (string filename)
создает графический образ из файла в формате PNG с именем filename, при определенных условиях в качестве filename может выступать URL удаленного файла.

resourse imagecreatefromjpeg (string filename)
создает графический образ из файла в формате JPEG с именем filename, при определенных условиях в качестве filename может выступать URL удаленного файла.

bool imagedestroy (resource image)
освобождает всю память, ассоциированную с образом image. Идентификатор image должен быть получен ранее от использования одной из функций семейства imagecreate*.

Вывод изображения

bool imagepng (resource image[, string filename])
выводит в формате PNG образ, указываемый image, в файл с именемfilename или в стандартный вывод (в броузер).

bool imagepng (resource image[, string filename])
выводит в формате JPEG образ, указываемый image, в файл с именемfilename или в стандартный вывод (в броузер).

Работа с палитрой

int imagecolorallocate (resource image, int red, int green, int blue)
размещает в палитре для графического образа image цвет, задаваемый компонентами red, green и blue. При удачном завершении возвращает индекс цвета в палитре, иначе - -1 (например, когда в палитре нет места для нового цвета). Компоненты цвета долны принимать значение из диапазона 0 ... 255. Внимание! Первый в программе вызов функции imagecolorallocate определяет цвет фона изображения, созданного с помощью функции imagecreate().

bool imagecolordeallocate (resource image, int color)
освобождает в палитре для графического образа image цвет с индексом color.

int imagecolorat (resource image, int x, int y)
возвращает индекс цвета пикселя с адресом x, y в графическом образе image. Для образа типа truecolor функция imagecolorat возвращает целое число в виде red*256*256+green*256+blue, где red, green, blue - три компонента цвета пикселя.

int imagecolorexact (resource image, int red, int green, int blue)
возвращает индекс цвета в палитре графического образа image, определяемого тремя компонентами red, green и blue. Если такого цвета в палитре нет, то возвращается значение -1.

int imagecolorclosest (resource image, int red, int green, int blue)
возвращает индекс цвета в палитре графического образа image, ближайшего цвету, задаваемому тремя компонентами red, green и blue.

void imagecolorset (resource image, int index, int red, int green, int blue)
цвету с индексом index в палитре образа image присваиваются компоненты red, green и blue.

array imagecolorsforindex (resource image, int index)
возвращает ассоциативный массив (с ключами red, green, blue и alpha), содержащий компоненты цвета с индексом index в палитре графического образа image.

int imagecolorstotal (resource image)
возвращает общее количество цветов в палитре графического образа image.

Графические элементы

bool imagesetpixel (resource image, int x, int y, int color)
устанавливает цвет color для пикселя с координатами x, y в графическом образе image.

bool imageline (resource image, int x1, int y1, int x2, int y2, int color)
прорисовывает цветом color отрезок прямой линии от пикселя с координатами x1, y1 до пикселя с координатами x2, y2 в графическом образе image.

bool imagerectangle (resource image, int x1, int y1, int x2, int y2, int color)
прорисовывает цветом color прямоугольник с верхней левой вершиной в пикселе с координатами x1, y1 и правой нижней вершиной в пикселе с координатами x2, y2 в графическом образе image.

bool imagefilledrectangle (resource image, int x1, int y1, int x2, int y2, int color)
прорисовывает закрашенный цветом color прямоугольник с верхней левой вершиной в пикселе с координатами x1, y1 и правой нижней вершиной в пикселе с координатами x2, y2 в графическом образе image.

bool imagepolygon (resource image, array points, int num_points, int color)
прорисовывает цветом color замкнутый многоугольник в графическом образе image. Массив points должен содержать num_points пар элементов, задающих координаты вершин многоугольника (например, points[0]=x0, points[1]=y0, points[2]=x1, points[3]=y1 и т.д.).

bool imagfilledepolygon (resource image, array points, int num_points, int color)
прорисовывает закрашенный цветом color многоугольник в графическом образе image. Массив points должен содержать num_points пар элементов, задающих координаты вершин многоугольника (например, points[0]=x0, points[1]=y0, points[2]=x1, points[3]=y1 и т.д.).

bool imageellipse (resource image, int cx, int cy, int w, int h, int color)
прорисовывает цветом color эллипс с центром в в пикселе с координатами xc, yc. Параметр w задает ширину эллипса, а параметр h - его высоту.

bool imagefilledellipse (resource image, int cx, int cy, int w, int h, int color)
прорисовывает закрашенный цветом color эллипс с центром в в пикселе с координатами xc, yc. Параметр w задает ширину эллипса, а параметр h - его высоту.

bool imagearc (resource image, int cx, int cy, int w, int h, int s, int e, int color)
прорисовывает цветом color дугу эллипса с центром в в пикселе с координатами xc, yc. Параметр w задает ширину эллипса, параметр h - его высоту, параметры s и e - начальный и конечный углы (в градусах по часовой стрелке) дуги.

bool imagefilledarc (resource image, int cx, int cy, int w, int h, int s, int e, int color, int style)
прорисовывает заполненную цветом color дугу эллипса с центром в в пикселе с координатами xc, yc. Параметр w задает ширину эллипса, параметр h - его высоту, параметры s и e - начальный и конечный углы (в градусах по часовой стрелке) дуги. Параметр style определяет способ закраски и представляет собой ИЛИ-комбинацию следующих символьных констант:

bool imagestring (resource image, int font, int x, int y, string s, int color)
прорисовывает цветом color строку текста s горизонтально в графическом образе image, используя шрифт font. Левый верхний угол текста располагается в пикселе с координатами x, y. Для формирования изображения текста используются встроенные шрифты с идентификаторами 1 (самый мелкий) ... 5 (самый крупный).

bool imagestringup (resource image, int font, int x, int y, string s, int color)
прорисовывает цветом color строку текста s вертикально в графическом образе image, используя шрифт font. Левый верхний угол текста располагается в пикселе с координатами x, y. Для формирования изображения текста используются встроенные шрифты с идентификаторами 1 (самый мелкий) ... 5 (самый крупный).

Манипулирование образом

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_w x src_h с координатами верхнего левого пикселя src_x, src_y графического образа src_im в область с координатами верхнего левого пикселя dst_x, dst_y графического образа dst_im.

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_w x src_h с координатами верхнего левого пикселя src_x, src_y графического образа src_im в область с координатами верхнего левого пикселя dst_x, dst_y графического образа dst_im. Степень слияния определяется параметром pct, который должен принимать значение из диапазона 0 ... 100, где 0 означает сохранение в dst_im исходного образа, а 100 - полную замену прямоугольной областью из src_im.

bool imagecopyresized (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)
копирует прямоугольную область размером src_w x src_h с координатами верхнего левого пикселя src_x, src_y графического образа src_im в прямоугольную область размером dst_w x dst_h с координатами верхнего левого пикселя dst_x, dst_y графического образа dst_im. Если размеры исходной и целевой областей не совпадают, то производится растяжение/сжатие исходной области.

resource imagerotate (resource src_im, float angle, int bg_color [, int ignore_transparent])
создает новый графический образ, содержащий изображение образа src_im, повернутое на на угол angle градусов. Размеры созданного и исходного образов совпадают. При повороте изображение исходного образа "вписывается" в созданный образ пропорциональным изменением (если это необходимо) размеров по двум осям, при этом зоны, не занятые повернутым изображением окрашиваются цветом bg_color.

Справочные функции

int imagesx (resource image)
возвращает ширину графического образа image.

int imagesy (resource image)
возвращает высоту графического образа image.

array getimagesize (string filename [, array &imageinfo])
определяет размеры графического образа, содержащегося в файле filename формата GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM или WBMP. Кроме того возвращает тип файла и его высоту/ширину в виде текстовой строки, пригодной для использования в стандартном HTML-теге <IMG>.

int imagefontheight (int font)
возвращает высоту (в пикселях) шрифта с индексом font.

int imagefontwidth (int font)
возвращает ширину (в пикселях) символа шрифта с индексом font.