Учитывая результат вызоваimagettfbbox()
, что такое правильная, пиксельная -идеальная точка для обеспеченияimagettftext()
чтобы текст не выходил за пределы его ограничивающей рамки?
Я определяю ширину/высоту и x/y базовой линии по ограничительной рамке следующим образом:
$box = imagettfbbox($size, $angle, $font, $text);
$boxXCoords = array($box[0], $box[2], $box[4], $box[6]);
$boxYCoords = array($box[1], $box[3], $box[5], $box[7]);
$boxWidth = max($boxXCoords) - min($boxXCoords);
$boxHeight = max($boxYCoords) - min($boxYCoords);
$boxBaseX = abs(min($boxXCoords));
$boxBaseY = abs(min($boxYCoords));
Затем я рисую заполненный прямоугольник на моем изображении размеров ограничивающей рамки :
imagefilledrectangle($image, 0, 0, $boxWidth - 1, $boxHeight - 1, $color);
. После этого рисую текст:
imagettftext($image, $size, $angle, $boxBaseX, $boxBaseY, $color, $font, $text);
Однако это приводит к тому, что текст выходит за пределы прямоугольника на один или два пикселя. Я видел несколько попыток исправить эту проблему в документации PHP imagettfbbox()
, но все они просто предлагали вычитать пиксель или два здесь и там, что мне кажется хаком. Что здесь происходит, и почему нам нужно подтасовывать цифры, чтобы все было правильно?