imagettftext

(PHP 4, PHP 5, PHP 7, PHP 8)

imagettftext Рисование текста на изображении шрифтом TrueType

Описание

imagettftext(
    GdImage $image,
    float $size,
    float $angle,
    int $x,
    int $y,
    int $color,
    string $font_filename,
    string $text,
    array $options = []
): array|false

Наносит текст text поверх изображения, используя TrueType шрифт.

Замечание:

До PHP 8.0.0 imagefttext() - это расширенный вариант imagettftext(), который дополнительно поддерживает extrainfo. Начиная с PHP 8.0.0, imagettftext() является псевдонимом imagefttext().

Список параметров

image

Объект GdImage, который возвращает одна из функций, создающих изображения, например, imagecreatetruecolor().

size

Размер шрифта в типографских пунктах.

angle

Угол в градусах, 0 градусов означает расположение текста слева направо. Положительные значения означают поворот текста против часовой стрелки. Например, текст повёрнутый на 90 градусов нужно будет читать снизу вверх.

x

Координаты x и y определяют отправную точку для первого символа текста (конкретно, левый нижний угол символа). Здесь есть отличие от функции imagestring(), в которой x и y определяют верхний левый угол первого символа. Например, "верхний левый" имеет координаты 0,0.

y

y-координата. Это позиция базовой линии шрифта, в общем случае она не совпадает с низшей точкой в символе.

color

Индекс цвета. Использование отрицательных индексов создаёт эффект выключенного сглаживания. Смотрите imagecolorallocate().

fontfile

Путь к шрифту TrueType, который вы хотите использовать.

В зависимости от того, какая библиотека GD загружена в PHP, если параметр fontfile не начинается с символа /, то к имени файла будет добавлено расширение .ttf и библиотека будет пытаться искать это имя файла по определённому библиотекой пути шрифтов.

При работе с версиями библиотеки GD ниже 2.0.18 как «разделитель путей» для отдельных файлов шрифтов использовался символ пробела, а не точка с запятой. Непреднамеренное использование этой особенности приведёт к предупреждению: Warning: Could not find/open font. Единственное решение для этих версий библиотек — переместить файлы шрифтов в директорию, имя которой не содержит пробелов.

Часто, когда шрифт лежит в том же каталоге, что и скрипт PHP, который работает с этим шрифтом, помогает следующий трюк.

<?php
// Установка переменной окружения для GD
putenv('GDFONTPATH=' . realpath('.'));

// Имя шрифта для использования (обратите внимание, что расширение .ttf не указывается)
$font = 'SomeFont';
?>

Замечание:

Обратите внимание, что open_basedir не применяется к fontfile.

text

Текстовая строка в кодировке UTF-8.

Для доступа к символам после 127го можно использовать числовые ссылки (в формате: &#8364;). Также поддерживается шестнадцатеричный формат (&#xA9;). Строки в кодировке UTF-8 можно передавать напрямую.

Именованные сущности, вроде &copy;, не поддерживаются. Используйте функцию html_entity_decode(), чтобы декодировать их в UTF-8 строки.

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

Возвращаемые значения

Возвращает массив из 8 элементов, представляющих 4 точки - координаты углов рамки обрамляющей текст. Точки представлены в таком порядке: левый нижний угол, правый нижний, верхний правый, верхний левый. Углы указаны относительно текста, то есть "верхний левый" означает верхний левый угол текста, если расположить его горизонтально. В случае возникновения ошибки функция вернёт false.

Список изменений

Версия Описание
8.0.0 Добавлен параметр options.

Примеры

Пример #1 Пример использования imagettftext()

В этом примере будет создано изображение PNG с белым фоном размером 400x30 пикселов и надписью "Тест..." черным цветом (с серой тенью) шрифтом Arial.

<?php
// Тип содержимого
header('Content-Type: image/png');

// Создание изображения
$im = imagecreatetruecolor(400, 30);

// Создание цветов
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// Текст надписи
$text = 'Тест...';
// Замена пути к шрифту на пользовательский
$font = 'arial.ttf';

// Тень
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Текст
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

imagepng($im);
imagedestroy($im);
?>

Вывод приведённого примера будет похож на:

Вывод примера: imagettftext()

Примечания

Замечание: Эта функция доступна только в случае, если PHP был скомпилирован с поддержкой freetype (--with-freetype-dir=DIR)

Смотрите также

  • imagettfbbox() - Получение параметров рамки обрамляющей текст написанный TrueType шрифтом
  • imagefttext() - Нанесение текста на изображение, используя шрифты FreeType 2