imagettfbbox

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

imagettfbbox Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта

Описание

imagettfbbox(
    float $size,
    float $angle,
    string $font_filename,
    string $string,
    array $options = []
): array|false

Функция рассчитывает и возвращает обрамляющую рамку в пикселях для текста, который выводится на экран библиотекой FreeType.

Замечание:

До PHP 8.0.0 функция imageftbbox() была расширенной версией функции imagettfbbox(), которая дополнительно поддерживала параметр extrainfo. Начиная с 8.0.0 функция imagettfbbox() стала псевдонимом функции imageftbbox().

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

size

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

angle

Угол в градусах, под которым функция измерит значение аргумента string.

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.

string

Измеряемая строка.

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

Функция imagettfbbox() возвращает массив из 8 элементов, которые представляют координаты четырёх точек — вершин рамки обрамления текста, если выполнилась успешно, и false, если возникла ошибка.

ключ содержимое
0 нижний левый угол, координата X
1 нижний левый угол, координата Y
2 нижний правый угол, координата X
3 нижний правый угол, координата Y
4 верхний правый угол, координата X
5 верхний правый угол, координата Y
6 верхний левый угол, координата X
7 верхний левый угол, Y координата

Точки располагаются относительно текста независимо от угла angle, поэтому «верхний левый» обозначает верхний левый угол, если смотреть на текст горизонтально.

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

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

Примеры

Пример #1 Пример определения границ обрамления функцией imagettfbbox()

<?php

// Создаём изображение размером 300x150
$im = imagecreatetruecolor(300, 150);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

// Устанавливаем белый фон
imagefilledrectangle($im, 0, 0, 299, 299, $white);

// Указываем путь к файлу шрифта
$font = './arial.ttf';

// Создаём рамку для текста
$bbox = imagettfbbox(10, 45, $font, 'Powered by PHP ' . phpversion());

// Устанавливаем координаты для осей X и Y
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

// Отрисовываем текст
imagettftext($im, 10, 45, $x, $y, $black, $font, 'Powered by PHP ' . phpversion());

// Создаём другую рамку для другого текста
$bbox = imagettfbbox(10, 45, $font, 'and Zend Engine ' . zend_version());

// Задаём координаты так, чтобы текст шёл сразу за первой надписью
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) + 10;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

// Наносим вторую надпись
imagettftext($im, 10, 45, $x, $y, $black, $font, 'and Zend Engine ' . zend_version());

// Выводим в браузер
header('Content-Type: image/png');

imagepng($im);

?>

Примечания

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

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

  • imagettftext() - Рисует текст на изображении шрифтом TrueType
  • imageftbbox() - Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта