Как работает «imagettfbbox ()» в PHP?

Не могли бы вы объяснить, что именно означает возвращаемое значение imagettfbbox() ? В руководстве написано :

imagettfbbox () возвращает массив с 8 элементами, представляющими четыре точки, что делает ограничивающий прямоугольник текста успешным, а FALSE – ошибкой. [… Таблица точек здесь …] Точки относятся к тексту независимо от угла, поэтому «верхний левый» означает в верхнем левом углу, видя текст по горизонтали.

Но я нашел это не очень ясным. Например, возвращаемое значение:

 array(-1, 1, 61, 1, 61, -96, -1, -96) 

означает следующие моменты:

 (-1, -96) ------ (61, -96) | | | | | | | | | | | | (-1, 1) -------- (61, 1) 

Как я должен их интерпретировать?

Почему существуют отрицательные значения?

Вы должны взглянуть на комментарий «marclaz» на странице руководства imagettfbbox :

Обратите внимание, что поскольку функции imageTTFBbox и imageTTFText возвращают массив координат, которые могут быть отрицательными, следует соблюдать осторожность с расчетами высоты и ширины.

Правильный способ сделать это – использовать функцию abs ():

для горизонтального текста:

 $box = @imageTTFBbox($size,0,$font,$text); $width = abs($box[4] - $box[0]); $height = abs($box[5] - $box[1]); 

Затем, чтобы центрировать текст в позиции ($ x, $ y), код должен быть таким:

 $x -= $width/2; $y += $heigth/2; imageTTFText($img,$size,0,$x,$y,$color,$font,$text); 

это потому, что (0,0) начало страницы – это верхний угол страницы и (0,0) исходный текст – это нижний левый читаемый текстовый угол.

Следующий ресурс объясняет это: http://www.tuxradar.com/practicalphp/11/2/6

Просто используйте abs () . Это из приведенного выше ресурса: «[функция] возвращает свои значения из нижнего левого угла базовой линии текстовой строки, а не в абсолютный нижний левый угол. Базовая линия письма – это место, где она будет сидеть, если бы вы были написав его на выровненной бумаге "