Не могли бы вы объяснить, что именно означает возвращаемое значение imagettfbbox()
? В руководстве написано :
imagettfbbox () возвращает массив с 8 элементами, представляющими четыре точки, что делает ограничивающий прямоугольник текста успешным, а FALSE – ошибкой. [… Таблица точек здесь …] Точки относятся к тексту независимо от угла, поэтому «верхний левый» означает в верхнем левом углу, видя текст по горизонтали.
- Пытается генерировать пропорционально обрезанные миниатюры с фиксированной шириной / высотой с помощью PHP GD
- Объедините png ontop из jpg и сохраните прозрачность с помощью php
- imagecopyresampled в PHP, может кто-нибудь объяснить это?
- Использование прозрачного PNG в качестве маски для клипа
- Как добавить изображение на изображение в PHP, например, водяной знак
Но я нашел это не очень ясным. Например, возвращаемое значение:
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 () . Это из приведенного выше ресурса: «[функция] возвращает свои значения из нижнего левого угла базовой линии текстовой строки, а не в абсолютный нижний левый угол. Базовая линия письма – это место, где она будет сидеть, если бы вы были написав его на выровненной бумаге "