Работа со шрифтами TrueType и PostScript Type 1

Работа со шрифтами TrueType и PostScript Type 1

Библиотека GD поддерживает также работу со шрифтами PostScript и TrueType. Для того чтобы заработали приведенные ниже функции, PHP должен быть откомпилирован и установлен вместе с библиотекой FreeType, доступной по адресу http://www.freetype.org. В Windows-версии PHP она установлена по умолчанию.

imageTTFText

Рисование текста шрифтом TrueType.

Синтаксис:

array imageTTFText(int im, int size, int angle, int x, int y, int color, string fontfile, string text)

Эта функция помещает строку text в изображение im цветом color. Как обычно, color должен представлять собой допустимый идентификатор цвета. Параметр angle задает угол наклона в градусах выводимой строки, отсчитываемой от горизонтали против часовой стрелки. Координаты (x, y) указывают положение так называемой базовой точки строки (обычно это ее левый нижний угол). Параметр size задает размер шрифта, который будет использоваться при выводе строки. fontfile должен содержать имя TTF-файла, в котором и храниться шрифт.

Функция возвращает список из 8 элементов. Первая их пара задает координаты (x,y) верхнего левого угла прямоугольника, описанного вокруг строки текста в изображении, вторая пара - координаты верхнего правого угла, и т.д. Так как в общем случае строка может иметь любой наклон angle, здесь требуются 4 пары координат.

Строка текста text может содержать символьные последовательности UTF-8 (в виде {) для вывода символов с кодами, большими 255.

При использовании отрицательного значения индекса цвета color отключается сглаживание шрифта (antialiasing).

Данная функция требует библиотеке GD и FreeType.

<?php

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

$im = imagecreate(400, 30);

$white = imagecolorallocate($im, 255, 255, 255);

$black = imagecolorallocate($im, 0, 0, 0);

// Replace path by your own font path

imagettftext($im, 20, 0, 10, 20, $black, "/path/arial.ttf",

"Testing... Omega: &#937;");

imagejpeg($im);

imagedestroy($im);

?>

Следующий пример выводит строку по центру рисунка

<?php

$gi = imageCreate(200,100);

$bg = imageColorAllocate($gi,0,220,0);

$tx = imageColorAllocate($gi,25,2,228);

$w = imageSX($gi); // ширина рисунка

$h = imageSY($gi); // высота рисунка

imageFilledRectangle($gi,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,"file.png");

?>

imageTTFBBox

Расчет площади, занимаемой строкой шрифта TrueType.

Синтаксис:

array imageTTFBBox(int size, int angle, string fontfile, string text)

Эта функция ничего не выводит в изображение, а просто определяет, какой размер и положение заняла бы строка текста text размера size, выведенная под углом angle в какой-нибудь рисунок. Параметр fontfile задает абсолютный путь к файлу шрифта, который будет использован при выводе.

Возвращаемый список содержит всю информацию о размерах строки в формате, похожем на тот, что выдает функция imageTTFText(). Однако порядок точек в нем отличается.

Содержимое массива, возвращаемого функцией imageTTFBBox():

Координаты могут иметь отрицательные значения.

Функция требует библиотеки GD и FreeType.

imagePSLoadFont

Загрузка из файла шрифта PostScript Type 1.

Синтаксис:

int imagePSLoadFont(string filename)

Возвращает дескриптор загруженного шрифта или FALSE при ошибке (также выводится предупреждение).

<?php

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

$im = imagecreate(350, 45);

$black = imagecolorallocate($im, 0, 0, 0);

$white = imagecolorallocate($im, 255, 255, 255);

$font = imagepsloadfont("bchbi.pfb"); // or locate your .pfb files on your machine

imagepstext($im, "Testing... It worked!", $font, 32, $white, $black, 32, 32);

imagepsfreefont($font);

imagejpeg($im, "", 100); //for best quality...your mileage may vary

imagedestroy($im);

?>

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePSFreeFont

Выгрузка шрифта PostScript Type 1.

Синтаксис:

void imagePSFreeFont(int fontindex)

Данная функция освобождает память от шрифта, заданного параметром fontindex.

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePSEncodeFont

Установка схемы перекодировки текста.

Синтаксис:

int imagePSEncodeFont(int font_ndex, string encodingfile)

Загружает файл перекодировки encodingfile для шрифта font_index. Поскольку шрифты PostScript по умолчанию не используют символы с кодами, большими 127, перекодировка требуется при необходимости использования не английского языка. Формат файла описан в документации Tllibs, также с библиотекой поставляются 2 готовых файла: IsoLatinl.enc и IsoL.atin2.enc.

Если перекодировка используется постоянно, установите параметр ps.default_encoding в файле конфигурации со значением имени файла перекодировки, который будет загружаться автоматически.

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePsExtendFont

Масштабирование шрифта.

Синтаксис:

bool imagePsExtendFont (int font_index, float extend)

Функция производит растяжение или сжатие шрифта, заданного параметром font_index до размера, заданного параметром extend.

Если значение параметра extend меньше 1, то шрифт будет уменьшаться.

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePsSlantFont

Установка наклона шрифта.

Синтаксис:

bool imagePsSlantFont(int font_index, double slant)

Функция устанавливает наклон шрифта font_index в значение, заданное параметром slant.

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePSBBox

Расчет площади, занимаемой строкой шрифта PostScript Type 1.

Синтаксис:

array imagePSBBox( string text, int font, int size [, int space [, int tightness [, float angle]]])

Расчеты производятся на основании аргументов:

Значения space и tightness измеряются в долях пробела (1/1000).

Аргументы space, tightness, angle не обязательны.

Результаты расчета недостаточно точны. Функция возвращает массив:

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.

imagePSText

Вывод текста поверх рисунка шрифтом PostScript Type 1.

Синтаксис:

array imagePSText ( resource image, string text, int font, int size, int foreground, int background, int x, int y [, int space [, int tightness [, float angle [, int antialias_steps]]]])

Параметр size задает размер шрифта.

Координаты x, у указывают левый нижний угол первого символа.

Аргументами foreground и background задаются цвета текста и фона (фон необходим только для сглаживания шрифта).

Аргумент antialias_steps позволяет указать число цветов, используемых при сглаживании текста (допустимые значения 4 и 16). Для шрифтов размером меньше 20 используйте большее значение, так как это улучшает читабельность; для больших шрифтов используйте меньшее значение, так как это увеличивает быстродействие.

Параметр angle задает наклон текста в градусах.

Функция возвращает массив, подобно imagepsbbox().

Эта функция доступна только в том случае, если PHP был скомпилирован с опцией --enable-t1lib.