Работа с графикой в PHP

Когда-то столкнулся с вопросом формирования графики в PHP. В принципе, это не сложно. Главное, понять принцип работы.

Прежде всего, Вы переводите php в графический режим. И рисуете. Таким образом в 1 файле php может быть только изображение.
Если Вам нужно соместить изображение, то этот файл с формирующимся изображением необходимо вызывать тегом

Теперь рассмотрим пример кода:

header ("Content-type: image/png");

$max_draw_width = 4000; // Максимальная ширина
$max_draw_height = 4000; // Максимальная высота

$img = imagecreate($max_draw_width, $max_draw_height); // Изображение

$ink = imagecolorallocate($img, 255, 255, 255);
ImageRectangle($img, 0, 0, $max_draw_width, $max_draw_height, $ink);

$ink = imageColorAllocate ($img, 0, 0 , 0 ); // Цвет в RGB

imageline($img,0,0,320-1,240-1,$ink);

ImageRectangle($img, 10, 10, 20, 20 , $ink);

imagepng($img);
imagedestroy($img);

?>

Вы можете применять большое количество команд для формирования изображения.
Вот набор команд и описание процесса рисования в PHP, которые я почерпнул на сайте http://archives.maillist.ru/43732/262896.html :

Сегодняшний выпуск на тему рисования в PHP. Это просто. Сначала создаётся изображение одной из нижеприведённых команд:

$image = imagecreate(width X, height Y) -- Создаёт новую картинку c идентификатором $image и параметрами width X - ширина, height Y - высота. С которым в последующем и будем работать. Или можно по другому:

$image = imagecreatefromgif("имя файла или URL"); -- Создаёт картинку из Гифа
$image = imagecreatefromjpeg("имя файла или URL"); -- Создаёт картинку из Jpeg файла
$image = imagecreatefrompng("имя файла или URL"); -- Создаёт картинку из Png файла
$image = imagecreatefromwbmp("имя файла или URL"); -- Создаёт картинку из Bmp файла


Регистрируем цвета(добавляем в палитру), которые будем использовать:
$colorBackgr = imageColorAllocate($image, 255, 255, 255); // Белый Цвет
$colorForegr = imageColorAllocate($image, 255, 0, 0); // Красный Цвет
$textcolor = imageColorAllocate ($image, 0, 0 , 0 ); // Чёрный цвет (отсутствие какого либо цвета)

imageColorDeAllocate($colorForegr);
Удаляем цвет из палитры, если не нужен


Формат команды простой:
imageColorAllocate(идентификатор рисунка , RED, GREEN, BLUE);

RGB - это я выучил ещё со времён ZX Spectrum-а 8-)))

Затем рисуем фон, он у нас будет простым квадратом размером во всё поле рисунка:
imageFilledRectangle($image, X1, Y1, X2, Y2, $colorBackgr);
Эта команда рисует прямоугольник, залитый указанным цветом в идентификаторе рисунка $image по начальным координатам: X1, Y1 и конечными X2, Y2 Цвет: $colorBackgr

Можно просто нарисовать прямоугольник без заливки командой:
ImageRectangle($image, X1, Y1, X2, Y2, $color);

Или линию:
ImageLine($image, X1, Y1, X2, Y2, $color);

Есть интересная команда, рисования многоугольников( c замкнутым !!! контуром ), которая берёт координаты вершин из массива:
$arr = array(X1, Y1, X2, Y2, X3, Y3, X4, Y4, X5, Y5);
ImagePolygon($image, $arr, 5, $color);
$arr - массив, содержащий данные вершин многоугольника
5 - количество вершин, выгребающихся из массива
$color - цвет рамки многоугольника

Есть аналогичная команда для рисования многоугольника с заливкой:
ImageFilledPolygon($image, $arr, 5, $color);

// Отправляем заголовок Content-type
//header("Content-type: image/gif"); Который говорит браузеру, что дальнейший поток данных будет КАРТИНКОЙ !
header("Content-type: image/jpeg");

// задаем чересстрочный режим
imageInterlace($image, 1);

// делаем цвет фона прозрачным
imageColorTransparent($image, $colorBackgr);

// и выводим изображение
//imageJPEG($image);
imageJPEG($image);

Вообще у меня при выводе изображения в формате PNG наблюдались всякие глюки, поэтому рекомендую делать всё в формате JPG

Можно выводить изображения в других форматах:
imagepng($image);
imagegif($image);
imagewbmp($image);
Тут вы думаю сами догадались, как это работает. НО !!! Tckb вы выводите изображение в другом формате, то его(этот формат) надо также указывать и при отправке заголовка, который отправляется ДО начала вывода потока данных:
header("Content-type: image/png");
header("Content-type: image/gif");
header("Content-type: image/wbmp");

Далее... Учитывая, что PHP-шное рисование используется в основном для счётчиков и вывода текста, поверх картинки, то приведу команды работы с текстом:

imagestring($image, 3, X, Y, "Текст надписи", $textcolor);
Здесь:
$image - идентификатор рисунка.
3 - Размер шрифта.
X, Y - Верхняя левая точка начала надписи
"Текст надписи" - Сами догадайтесь, что это такое %)
$textcolor - Цвет текста, заданный выше командой ImageColorAllocate (он у нас чёрный)

imagestringup($image, 3, X, Y, "Текст надписи", $textcolor);
Эта команда рисует вертикальный текст, тоесть сверху вниз. параметры теже.


imagettftext($image, размер, угол наклона текста, X, Y, $color, "шрифт xxx.ttf", "сам текст собсно");
Эта команда рисует текст, используя подключаемый стандартный файл шрифтов xxxx.ttf Параметры думаю объяснять не надо.

Также можно рисовать:

imageellipse($image, X, Y, ширина, высота, $color); // Эллипс


imagearc($image, CX, CY, W, H, S, e, $color); // Дуга, которая представляет из себя кусок окружности эллипса
Рисуется дуга, которая представляет из себя кусок эллипса
CX, CY - центр эллипса
W, H - высота, ширина
S - Стартовый угол дуги (если 0 то начало на три часа)
e - Конечный угол дуги

Счётчики на сайтах устроены совсем просто:

$image = imagecreatefromjpeg("имя файла или URL");
// Берём шаблон картинки, загружая её из файла

$textcolor = imagecolorresolve($image, R, G, B); // Это команда, которая возвращает номер цвета, который ближе всего в палитре шаблонной картинки к параметрам R, G, B Что совсем не значит, что он будет именно такой, какой вы хотите, ибо в палитре нужный цвет может просто отсутствовать. Поэтому лучше заранее выбрать этой командой подходящий номер цвета, а потом уже задать его номером

imagestring($image, 3, X, Y, "Текст надписи", $textcolor);
// Пишем по картинке чё нить нужное и важное

header("Content-type: image/jpeg");

imageInterlace($image, 1);

// и выводим изображение
imageJPEG($image);

Затем данный скриптик пихаем в counter.php и на страничке её помещаем в таком вот виде:


Если вам надо в скрипте потереть картинку на идентификаторе, а потом снова её создать, то можно воспользоваться командой:
imagedestroy($image);

Так же, полезные алгоритмы есть на сайте: http://www.codenet.ru/webmast/php/gd/Pixel-Line.php

Нашел на сайте http://www.softtime.ru/group/id_group=15 целый ряд команд для работы с графикой (из библиотеки GDLib):

Библиотека GDLib

Название


Описание
exif_imagetype

Функция определяет формат изображения
exif_read_data

Функция читает заголовки файлов JPEG и TIFF и возвращает ассоциативный массив со свойствами файлов, размещенных в заголовках.
exif_thumbnail

Возвращает встроенные эскизы (уменьшенные изображения) из файлов форматов JPEG и TIFF.
gd_info

Возвращает ассоциативный массив с информацией об установленной библиотеке GD
getimagesize

Возвращает размер файла в пикселях и различную информацию об изображении
image2wbmp

Сохраняет WBMP-изображение в файл на диске
imagealphablending

Определяет режимы прорисовки полноцветных изображений
imageantialias

Включает и отключает опцию сглаживания при рисовании на изображении
imagearc

Рисует дугу эллипса
imagechar

Горизонтальное рисование символа
imagecharup

Вертикальное рисование символа
imagecolorallocate

Функция возвращает идентификатор цвета для изображения
imagecolorallocatealpha

Функция возвращает идентификатор цвета для изображения
imagecolorat

Функция возвращает индекс цвета
imagecolorclosest

Функция возвращает идентификатор цвета из цветовой палитры изображения который наиболее близко подходит к цвету RGB
imagecolorclosestalpha

Функция возвращает идентификатор цвета из цветовой палитры изображения, который наиболее близко подходит к цвету RGB
imagecolorclosesthwb

Возвращает индекс градации серого для цвета передаваемого RGB-компонентами
imagecolordeallocate

Функция уничтожает объект цвета
imagecolorexact

Возвращает идентификатор цвета из цветовой палитры изображения
imagecolorexactalpha

Возвращает идентификатор цвета из цветовой палитры изображения
imagecolormatch

Проверяет на сходство два изображения
imagecolorresolve

Функция ищет на изображении запрошенный цвет и возвращает его идентификатор
imagecolorresolvealpha

Функция ищет на изображении запрошенный цвет и возвращает его идентификатор
imagecolorset

Функция производит модификацию цветовой палитры изображения
imagecolorsforindex

Функция возвращает цвет, содержащийся в индексе цветовой палитры изображения
imagecolorstotal

Возвращает количество цветов в цветовой палитре изображения
imagecolortransparent

Устанавливает прозрачный цвет на изображении
imagecopy

Функция копирует одно изображение на другое
imagecopymerge

Функция копирует с объединением одну область изображения на другую
imagecopymergegray

Копирование с объединением одного изображения на другое
imagecopyresampled

Функция копирует прямоугольные области с одного изображения на другое
imagecopyresized

Функция копирует прямоугольные области с одного изображения на другое
imagecreate

Создает пустое изображение
imagecreatefromgd

Создает новое изображение из файла формата GD
imagecreatefromgd2

Создает новое изображение из файла формата GD2
imagecreatefromgd2part

Создает новое изображение из прямоугольной области файла
imagecreatefromgif

Создает изображение из файла формата GIF
imagecreatefromjpeg

Создает изображение JPEG из файла
imagecreatefrompng

Создает изображение из файла формата PNG.
imagecreatefromstring

Создает новое изображения из потока
imagecreatefromwbmp

Создает изображение из файла формата WBMP
imagecreatefromxbm

Создает изображение из файла формата XBM
imagecreatefromxpm

Создает изображение из файла формата XPM.
imagecreatetruecolor

Создает пустое полноцветное изображение
imagedashedline

Функция рисует штрихпунктирную линию
imagedestroy

Функция освобождает память, занятую изображением
imageellipse

Функция рисует эллипс
imagefill

Функция производит заливку области внутри контура
imagefilledarc

Рисует сектор эллипса и осуществляет его заливку
imagefilledellipse

Рисует закрашенный эллипс
imagefilledpolygon

Рисует закрашенный многоугольник
imagefilledrectangle

Рисует закрашенный прямоугольник
imagefilltoborder

Выполняет заливку области внутри контура
imagefilter

Применяет фильтр к изображению
imagefontheight

Возвращает высоту символов шрифта
imagefontwidth

Возвращает ширину символов шрифта
imageftbbox

Вычисляет размеры прямоугольника, ограничивающего строку, написанную шрифтом Free Type 2
imagefttext

Записывает строку на изображение с помощью шрифта Free Type 2
imagegammacorrect

Функция, осуществляющая гамма-коррекцию изображения
imagegd

Записывает GD2-изображение на диск
imagegd2

Записывает GD2-изображение на диск
imagegif

Записывает изображение на диск в формате GIF
imageinterlace

Включает и выключает чересстрочное формирование изображения
imageistruecolor

Определяет является ли изображение полноцветным.
imagejpeg

Записывает изображение на диск в формате JPEG
imagelayereffect

Устанавливает флаг смешивания для использования в эффектах наложения слоев
imageline

Рисует линию
imageloadfont

Загружает пользовательский растровый шрифт из файла
imagepalettecopy

Копирует цветовую палитру из изображения-источника в изображение-приемник
imagepng

Записывает изображение на диск в формате PNG
imagepolygon

Рисует многоугольник
imagepsbbox

Вычисляет размеры прямоугольника, в который вписана строка, написанная шрифтом PostScript Type1.
imagepscopyfont

Создает копию PostScript Type1 шрифта
imagepsencodefont

Загружает вектор кодировки из файла
imagepsextendfont

Сжимает или растягивает PostScript Type1 шрифт
imagepsfreefont

Освобождает память занятую шрифтом
imagepsloadfont

Загружает шрифт в формате PostScript Type1 из файла
imagepsslantfont

Осуществляет наклон PostScript Type1 шрифта
imagepstext

Записывает строку на изображении PostScript Type1 шрифтом
imagerectangle

Рисует прямоугольник
imagerotate

Осуществляет поворот изображение
imagesavealpha

Применяется для установки прозрачности изображений в формате PNG
imagesetbrush

Устанавливает кисть, используемую при рисовании линий и контуров
imagesetpixel

Рисует пиксель
imagesetstyle

Устанавливает стиль, используемый всеми функциями рисования линий и контуров
imagesetthickness

Устанавливает толщину линий при рисовании
imagesettile

Устанавливает изображение в качестве фоновой заливки
imagestring

Горизонтальное рисование строки
imagestringup

Вертикальное рисование строки
imagesx

Функция возвращает ширину изображения image в пикселях
imagesy

Функция возвращает высоту изображения image в пикселях
imagetruecolortopalette

Конвертирует полноцветное изображение в изображение с цветовой палитрой с ограниченным числом цветов
imagettfbbox

Вычисляет размеры прямоугольника, в который вписана строка, написанная TrueType-шрифтом
imagettftext

Записывает строку на изображении TrueType-шрифтом
imagetypes

Возвращает формат изображений, которые поддерживаются текущей реализацией PHP и библиотеки GD.
imagewbmp

Записывает изображение на диск в формате WBMP
imagexbm

Записывает изображение на диск в формате XBM
image_type_to_mime_type

Определяет mime-типы для констант imagetype, возвращаемых функциями getimagesize(), exif_read_data(), exif_thumbnail(), exif_imagetype().
iptcembed

Внедряет двоичные данные в заголовок файла в формате JPEG
iptcparse

Функция осуществляет разбор и выдачу информации представленной в двоичном виде в IPTC-блоках
jpeg2wbmp

Конвертирует изображение в формате JPEG в изображение формата WBMP
png2wbmp

Конвертирует изображение в формате PNG в изображение формата WBMP
read_exif_data

Является псевдонимом функции exif_read_data()

Комментарии

Популярные сообщения