Учебник по основам PHP

           

Графика, 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 элементов, определяющих прямоугольник вывода текста:

  1. нижний левый угол, Х-координата;
  2. нижний левый угол, Y-координата;
  3. нижний правый угол, Х-координата;
  4. нижний правый угол, Y-координата;
  5. верхний правый угол, Х-координата;
  6. верхний правый угол, Y-координата;
  7. верхний левый угол, Х-координата;
  8. верхний левый угол, 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 (в виде &#123;) для вывода символов с кодами, большими 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: &#937;"):
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().



Содержание раздела