(PHP 4, PHP 5, PHP 7, PHP 8)
imagettfbbox — Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта
$size
,$angle
,$font_filename
,$string
,$options
= []Функция рассчитывает и возвращает обрамляющую рамку в пикселях для текста, который выводится на экран библиотекой 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)