Графика, Flash, pdf
РНР позволяет выводить не только HTML-текст, но и создавать (и отсылать браузеру) графические данные в различных форматах (gif, png, jpg, wbmp, xpm). Для того чтобы РНР мог работать с графикой, требуется библиотека GD. Вероятно, также потребуются дополнительные библиотеки для поддержки особенных форматов. Начиная с версии 1.6, GD не поддерживает работу с форматом GIF; вместо него используется формат png.
Библиотека GD library доступна по адресу http://www.boutell.com/gd/.
Для работы с рисунками jpeg используется библиотека jpeg-6b (ftp:// ftp.uu.net/graphics/jpeg/), которую следует прикомпилировать с Gd, используя параметр компиляции РНР -with-jpeg-dir=/path/to/jpeg-6b. Для поддержки шрифтов Туре 1, используя параметр —with-tllib[= dir] установите tllib (ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/ tllib/).< /FONT>
Следующий пример (сценарий button.php) вызывается со страницы тегом вида <img src= "button.php?text">(в данном случае на рисунке images/buttonl.png будет выведена надпись «text» и затем этот рисунок будет отослан браузеру). Это более удобный способ, использующий готовый макет рисунка, не требующий его перерисовки с начала, но добавляющий в него дополнительные элементы. < /FONT>
<?prip // файл button.php
Headert"Content-type: image/png");
$stnng=implode($argv." "):
$1m = imageCreateFromPngC'images/buttonl.png"):
Sorange = ImageColorAllocate($1m. 220. 210. 60);
$px = (imagesx($im)-7.5*strlen($string))/2;
ImageStri ng($1m.3.$px.9.$stri ng.Sorange):
ImagePng($im); ImageDestroy($im); ?>
ImageTypes
Определение графических форматов, поддерживаемых РНР
int imagetypes(void);
Возвращает битовую маску графических форматов, поддерживаемых используемой библиотекой GD: IMG_GIF | IMG_JPG IMG_PNG | IMG_WBMP.
<?php if (ImageTypesO & IMG_PNG)
{ echo "формат PNG поддерживается". } ?>
ImageCreate
Создание рисунка
int imagecreate (int x_s1ze, int y_size)
Возвращает дескриптор созданной картинки размером x_size на y_size.
<?php header ("Content-type: image/png").
$ni = @ImageCreate (50. 100) or die
("Нельзя создать GD image ");
Sbackground_color -- ImageColorAllocate
(Sim. 255. 255. 255): $text_co1or =
ImageColorAllocate
(Sim. 233. 14. 91): ImageStnng
($im, 1. 5. 5. "A Simple Text String". $text_color)
ImagePrg ($im): // передать рисунок браузеру ?>
ImageCreateFromGIF
Создание рисунка из файла GIF
Int imagecreatefromgif (string filename)
Возвращает дескриптор рисунка filename (можно указать URL) или пустую строку при ошибке (с выдачей предупреждения).
function LoadGif (Simgname) {
Sin1 @ImdgeCreateFromGIF ($imgname):
/* Attempt to open */ if (!$im) { /* See if it failed */
$im = ImageCreate (150. 30);
/* Create a blank image */ Sbgc =
ImageColorAl locate ($im. 255. 255. 255);
$tc = ImageColorAllocate ($im. 0. 0. 0):
ImageFilledRectangle (Sim. 0. 0. 150. 30, Sbgc);
ImageStnng($im. 1. 5. 5. "Error loading Simgname". Stc): }
return Sim. }
Так как GD, начиная с версии 1.6, не поддерживает GIF, функция недоступна для этих версий.
ImageCreateFromJPEG
Создание рисунка из файла JPEG
int imagecreatefromjpeg (string filename)
Возвращает дескриптор рисунка filename (можно указать URL) или пустую строку при ошибке (с выдачей предупреждения).
ImageCreateFromPNG
Создание рисунка из файла PNG
int imagecreatefrompng (string filename)
Возвращает дескриптор рисунка filename (можно указать URL) или пустую строку при ошибке (с выдачей предупреждения).
GetlmageSize
Получение свойств рисунка GIF, JPEG, PNG, SWF
array getimagesize (string filename [, array imageinfo])
Возвращает массив, содержащий информацию о графическом файле (4 элемента): [0] и [1] — ширина и высота рисунка в пикселах, [2] — тип файла (1 = GIF, 2 - JPG, 3 - PNG, 4 = SWF), [3] - строка вида «height= xxx width = xxx», которая может использоваться непосредственно в HTML-теге IMG.< /FONT>
<?php $size = GetlmageSize ("img/flag.jpg"): ?>
<IMG SRC= "img/flag.jpg"<7php echo $size[3]. ?> < /FONT>
Указав необязательный массив imageinfo, в нем можно сохранить дополнительную информацию о файле, например различные маркеры JPG APP (внедренную информацию). Часто в маркер АРР13 заносят информацию IPTC http://www.iptc.org/. Функция iptcparse() позволяет конвертировать эти данные АРР13 в читаемый вид.
<?php Ssize = GetlmageSize ("testimg.jpg".&$info):
if (isset ($info["APP13"])) {
Siptc = iptcparse ($info["APP13"]):
var_dump (Siptc): ; } ?>
Функция не требует библиотеки GD.
read_exif_data
Чтение заголовков EXIF из файла JPEG
array read_exif_data (string filename)
Возвращает ассоциативный массив, в котором индексами являются имена заголовков Exif. Заголовки Exif обычно хранят информацию цифровых камер (в различном виде).
<?php Sexif = read_exif_data Cp0001807.jpg');
while(list($k.$v)=each($exif))
{ echo "$k: $v<br>\n"; } ?> Output
FileName: p0001807.jpg
FileDateTime: 929353056 FileSize 378599
CameraMake: Eastman Kodak Company
CameraModel: KODAK DC265
ZOOM DIGITAL CAMERA (V01.00)
DateTime: 1999:06:14 01-37:36
Height: 1024 Width: 1536 IsCoIor: 1
FlashUsed 0 Focal Length: 8.0mm
RawFocalLength: 8 ExposureTime: 0.004 s
(1/250) RawExposureTime.
0.0040000001899898
ApertureFNumber: f/ 9.5
RawApertureFNumber:
9.5100002288818
FocusDi stance: 16.66m
RawFocusOistance: 16.659999847412
Orientation: 1 ExifVersiori: 0200
Функция доступна, только если PHP 4 компилировался с параметром --enable-exif. Библиотека GD не требуется.
ImageSX
Определение ширины рисунка
int imagesx (int lm)
См. также: ImageCreate() и ImageSY().
ImageSY
Определение высоты рисунка
int imagesy (int im)
См. также: ImageCreate() и ImageSX().
Imagelnterlace
Установка чересстрочности
int imageinterlace (int im [, int interlace])
Если interlace = 1, то это делает рисунок отображаемым чересстрочно, если 0 — последовательно. Возвращается текущая установка чересстрочности. < /FONT >
ImageGIF
Отсылка рисунка GIF браузеру или сохранение его в файле int imagegif (int im [, string filename])
Cos/част файл формата GIF из рисунка im. Затем файл сохраняется под именем filename, или, если имя не указано, содержимое файла передается непосредственно браузеру (не забывайте предварительно отослать браузеру заголовок, сообщающий, что передается графический файл). Файл имеет формат GIF87a, а если он был сделан прозрачным функцией ImageColorTransparent(), то формат будет GIF89a.
Так как GD, начиная с версии 1.6, не поддерживает GIF, функция недоступна для этих версий.
Следующий пример позволяет выводить рисунок в зависимости от того, какой формат поддерживается.
<?php if (function_exists("imagegif"))
{ Header("Content-type: image/gif"): ImageGif(Sim): }
elseif (function_exists("imagejpeg")) {
Header("Content-type: image/jpeg").
ImageJpeg($lm. "". 0 5): }
elseif (function_exists("imagepng")) (
Header("Content-type: image/png"):
ImagePng($im). } else
dieC'No image support in this PHP server"): ?>
Используйте функцию imagetypes() вместо function_exists() для проверки поддержки различных форматов:
if (ImageTypes()& IMG_GIF) {
Header("Content-type: image/gif"): ImageGif(Jim): }
elseif (ImageTypesO & IMG_JPG) { ... etc.
См. также: ImagePng(), ImageJpeg(), ImageTypes().
ImagePNG
Отсылка рисунка PNG браузеру или сохранение его в файле int imagepng (int im [, string filename])
Выводит GD рисунок im в формате PNG на стандартный поток вывода (обычно браузер), или если указано имя файла filename, то в этот файл.
<?php $im = ImageCreateFromPngC'test.png").
ImagePng($im). ?>
См. также: ImageGif(), ImageJpeg(), ImageTypes().
ImageJPEG
Отсылка рисунка JPEG браузеру или сохранение его в файле
int imagejpeg (int im [, string filename [, int quality]])
Выводит рисунок im в формате JPEG на стандартный поток вывода (обычно браузер), или если указано имя файла filename, то сохраняет в этот файл. Аргументом quality можно указать качество изображения (обратно пропорционально размеру файла) от 0 до 100.
Imagejpeg($im.'' .20);// вывести рисунок
Поддержка JPEG была добавлена в GD 1.8 и более поздние версии.
См. также: ImagePng(), ImageGif(), ImageTypes().
ImageDestroy
Уничтожение рисунка
int imagedestroy (int im)
ImageCopy
Копирование части рисунка
int ImageCopy (int dst_im, int src_im, int dst_x, int dst_y, ] int src_x, int src_y, int src_w, int src_h)
Копирует прямоугольную область src_x, src_y, src_w (ширина), src_h / (высота) рисунка src_im в рисунок dst_im со смещением dst_x, dst_y.
ImageCopyResized
Копирование части рисунка с масштабированием
int imagecopyresized (int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
Функция подобна ImageCopy(), но область рисунка масштабируется, так что его ширина и высота становятся равными dstW и dstH.
Цвета и палитра
ImageColorAllocate
Выделение цвета для рисунка
int imagecoloral locate (int im, int red, int green, int blue)
Возвращает индекс добавленного в палитру цвета, составленного из компонентов red (красный), green (зеленый), blue (синий).
Swhite = ImageColorAllocate ($im. 255. 255. 255);
// белый Sblack = ImageColorAl locate ($irp. 0. 0. 0).
// черный
ImageColorDeAllocate
Исключение цвета из палитры рисунка
int imagecolordeal locate (int im, int index)
$white - ImageColorAllocate($im. 255, 255. 255);
ImageColorDeAl locate($im. $white);
ImageColorSet
Замена цвета определенного элемента палитры
boo! imagecolorset (int im, int index, int red, int green, int blue)
Устанавливает для элемента палитры index рисунка im значения компонент цвета: red (красный), green (зеленый), blue (синий). При этом все части рисунка, закрашенные данным цветом, также изменят свой оттенок.
См. также imagecolorat().
ImageColorsForlndex
Получение цвета элемента палитры
array imagecolorsforindex (int im, int index)
Возвращает ассоциативный массив трех элементов: red, green, blue, содержащий значение компонентов цветности указанного цвета index.
См. также: imagecolorat() и imagecolorexact().
ImageColorExact
Получение индекса цвета палитры
int imagecolorexact (int im, int red, int green, int blue)
Если точно соответствующего цвета в палитре не имеется, то возвращается -1.
См. также imagecolorclosest().
ImageColorClosest
Получение цвета палитры, наиболее близкого к указанному
int imagecolorclosest (int im, int red, int green, int blue)
Возвращает индекс цвета палитры рисунка. Близость вычисляется согласно RGB.
См. также imagecolorexact().
ImageColorResolve
Нахождение или создание указанного цвета
int imagecolorresolve (int im, Int red, int green, Int blue)
Возвращает индекс указанного цвета в палитре. Если такой цвет отсутствует, он создается.
См. также imagecolorclosest().
ImageGammaCorrect
Применение гамма-коррекции рисунка
Int Imagegammacorrect (int im, double inputgamma, double outputgamma)
ImageColorsTotal
Получение числа цветов в палитре
int imagecolorstotal (int im)
См. также: imagecolorat() и imagecolorsforindex().
ImageColorTransparent
Определение цвета прозрачности
int imagecolortransparent (int im [, int col])
Устанавливает (возвращает) индекс цвета палитры, используемого как прозрачный. Возвращает индекс текущего (или установленного) «прозрачного» цвета.
ImageColorAt
Получение индекса цвета пиксела
int imagecolorat (int im, int x, int y)
См. также: imagecolorset() и imagecolorsforindex().
Черчение фигур
ImageSetPixel
Установка пиксела
int imagesetpixel (int im, int x, int y, int color) Верхний левый угол рисунка имеет координаты (О, О).
См. также: ImageCreate() и ImageColorAllocate().
ImageLine
Черчение линии
int imageline (int im, int xl, int yl, int x2, int y2, int color)
ImageDashedLine
Черчение прерывистой линии
int imagedashedline (Int im, int xl, int yl, int x2, int y2, int col)
См. также ImageLine().
ImageRectangle
Черчение прямоугольника
int imagerectangle (Int im, int xl, int yl, int x2, int y2, int col) Левый верхний угол задается (xl, yl), а правый нижний — (x2, y2).
ImageFilledRectangle
Зарисовка прямоугольной области
int imagefilledrectangle (int im, int xl, int yl, int x2, int y2, int col)
ImagePolygon
Черчение многоугольника
int imagepolygon (int im, array points, int numjreints, int col)
Аргумент points содержит координаты углов в виде: points[0] = xO, points[l] = yO, points[2] = xl, points[3] = yl и.т. д. num_points задает число углов. < /FONT >
См. также imagecreate().
ImageFilledPolygon
Закраска многоугольника
int imagefilledpolygon (int im, array points, int num_points, int col)
ImageArc
Рисование части эллипса
int imagearc (int im, int ex, int cy, int w, int h, int s, int e, int col)
ex, су задают центр эллипса, w и h — ширину и высоту, s и е — начальный и конечный угол в градусах, со! — цвет.
ImageFill
Заливка цветом ограниченной области
int imagefill (int im, int x, "int y, int col)
ImageFillToBorder
Заливка области, ограниченной бордюром
int imagefilltoborder (int im, int x, int y, int border, int col)
Индекс цвета окантовки задается аргументом border, а заливки — col. Заливка начинается от точки с координатами (х,у).
Шрифты и надписи
. ImageLoadFont
Загрузка шрифта
int image!oadfont (string file)
Загружает шрифт из файла file и возвращает назначенный ему идентификатор. Встроенные шрифты имеют идентификаторы 1-5 (меньший-больший). Формат файла зависит от системы. В общем случае он имеет следующую структуру:
Байты |
Тип |
Описание |
0-3 |
int |
Число символов в файле |
4-7 |
int |
Код первого символа (обычно 32 — пробел) |
8-11 |
int |
Ширина символов в пикселах |
12-15 |
int |
Высота |
16-... |
int |
Массив ланных символов (байт на пиксел для каждого символа). Общий размер: (псЬаг5хвысотахширипа) байт. |
См. также: ImageForitWidth() и ImageFontHeight().
ImageFontHeight
Установка высоты шрифта
int imagefontheight (int font)
См. также: ImageFontWidth() и ImageLoadFont().
ImageFontWidth
Установка ширины шрифта
int imagefontwidth (int font)
См. также: ImageFontHeight() и ImageLoadFont().
ImageChar
Вывод символа горизонтально
int imagechar (int im, int font, int x, int y, string c. int col) Шрифт указывается его номером font (1-5 — встроенные шрифты).
См. также imageloadfont().
ImageCharUp
Вывод символа вертикально
int imagecharup (int im, int font, int x, int y, string c, int col)
См. также image!oadfont().
ImageString
Вывод строки горизонтально
int imagestring (int im, int font, int x, int y, string s, int col)
См. также ImageLoadFont().
ImageStringUp
Вывод строки вертикально
int imagestringup (int im, int font, int x, int y. string s. int col)
См. также ImageLoadFont().
ImageTTFBBox
Расчет площади, занимаемой строкой шрифта ТуреТуре
array imagettfbbox (int size, int angle, string fontfile, string text) Аргументы, от которых зависит результат функции:
- text — строка текста;
- size — размер шрифта в пикселах;
- Fontfile — имя файла, содержащего шрифт TrueType (можно указать URL); ,
- angl e — угол наклона текста.
Возвращает массив из 8 элементов, определяющих прямоугольник вывода текста:
- нижний левый угол, Х-координата;
- нижний левый угол, Y-координата;
- нижний правый угол, Х-координата;
- нижний правый угол, Y-координата;
- верхний правый угол, Х-координата;
- верхний правый угол, Y-координата;
- верхний левый угол, Х-координата;
- верхний левый угол, Y-координата.
Возвращаемые координаты зависят от угла наклона строки (точкой отсчета служит нижний левый угол первого символа). Координаты могут иметь отрицательные значения. Функция требует библиотеки GD и FreeType
См. также ImageTTFText().
ImageTTFText
Рисование текста шрифтом TrueType
array imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text)
Выводит строку text в рисунок im - в координаты х, у (верхний левый угол является началом координат), под углом angle (задается в градусах) цветом col, используя шрифт TrueType из файла fontfile. Аргументами х, у задастся базовая точка первого символа (нижний левьн"! угол символа), что отличает данную функцию от ImageString(), где координаты х, у определяют верхний правый угол символа. Строка текста может включать символьные последовательности UTF-8 (в виде {) для вывода символов с кодами, большими 255.
При использовании отрицательного значения индекса цвета отключается сглаживание шрифта (antialiasing).
Возвращает массив из 8 элементов, определяющих прямоугольник вывода текста подобно функции imagettfbbox(). Функция требует библиотеки GD и FreeType.
<?php Header ("Content-type: image/gif").
$im = imagecreate (400. 30).
Sblack = ImageColorAllocate ($im. 0 0. 0);
$white = ImageColorAl locate ($im. 255. 255. 255);
ImageTTFText ($щ. 20. 0. 10. 20.
Swhite. "/path/anal .ttf", "Testing Omega: Ω"):
ImageGif (Sin). ImageDestroy (Sim); ?>
Следующий пример выводит строку по центру рисунка:
<?
$gi =
ImageCreate(200.100):
$bg =
ImageColorAllocate($gi.0.220.0);
$tx =
ImageColorAllocate($gi.25.2.228).
$w=imagesx(Igi): // ширина рисунка
$h=imagesy($9i): // высота
ImageFilledRectang]6($gl.0.0.$w,$h.$bg):
$szf=20; // размер шрифта
$ang=240; // угол поворота строки
$str="Heyou". // текст строки
$font="symbol.ttf": // файл шрифта
$sz=imagettfbbox($szf.$ang.$font.$str).
$sdx=$sz[4]/2; $sdy=($sz[7]+$sz[3])/2;
imagettftext($gi.$szf.$ang.
$w/2-$sdx.$h/2-$sdy.$tx.$font.$str);
//header("content-type, image/png"):
ImagePng($gi."n2.png"); ?>
См. также ImageTTFBBox().
ImagePSLoadFont
Загрузка из файла шрифта PostScript Type 1 int imagepsloadfont (string filename)
Возвращает дескриптор загруженного шрифта или FALSE при ошибке (также выводится предупреждение).
См. также ImagePSFreeFont().
ImagePSFreeFont
Выгрузка шрифта PostScript Type 1
void imagepsfreefont (int fontindex)
См. также ImagePSLoadFont().
ImagePSEncodeFont
Установка схемы перекодировки текста
int imagepsencodefont (int fontjindex, string encodingfile)
Загружает файл перекодировки encodingfile для шрифта font_index. Поскольку шрифты PostScript по умолчанию не используют символы с кодами, большими 127, перекодировка требуется при необходимости использования не английского языка. Формат файла описан в документации Tllibs, также с библиотекой поставляются 2 готовых файла: IsoLatinl.enc и IsoLatinZ.enc.
Если перекодировка используется постоянно, установите параметр ps.default_encoding в файле конфигурации со значением имени файла перекодировки, который будет загружаться автоматически.
ImagePsExtendFont
Масштабирование шрифта
bool imagepsextendfont (int fontjindex. double extend)
ImagePsSlantFont
Установка наклона шрифта
bool imagepsslantfont (int font_index, double slant)
ImagePSBBox
Расчет площади, занимаемой строкой шрифта PostScript Type 1
array imagepsbbox (string text, int font, ifft size [, int space [, int tightness [, float angle]]])
Расчеты производятся на основании аргументов: Size — размер шрифта в пикселах; Space — изменение размера пробелов по отношению к нормальному (может быть отрицательным); Tightness — промежутки между символами по отношению к нормальному (может быть отрицательным); Angle — угол наклона строки в градусах. Значения space п tightness измеряются в долях пробела (1/1000).
Аргументы space, tightness, angle не обязательны.
Результаты расчета недостаточно точны. Функция возвращает массив:
- 0 — нижний левый угол, Х-координата;
- 1 — нижний левый угол, У-координата;
- 2 — верхний правый угол, Х-координата;
- 3 — верхний правый угол, Y-координата.
См. также imagepstext().
ImagePSText
Вывод текста поверх рисунка шрифтом PostScript Type 1
array imagepstext (int image, string text, int font, int size, int foreground, int background, int x, int у [, int space [, int tightness [, float angle [, int antialias_steps>)
Координаты х, у указывают левый нижний угол первого символа.
Аргументами Foreground и Background задаются цвета текста и фона (фон необходим только для сглаживания шрифта). Аргумент Antialias_steps позволяет указать число цветов, используемых при сглаживании текста (допустимые значения 4 и 16). Для шрифтов размером меньше 20 используйте большее значение, так как это улучшает читабельность; для больших шрифтов используйте меньшее значение, так как это увеличивает быстродействие.
Функция возвращает массив, подобно imagepsbbox().
См. также imagepsbbox().