Каков правильный способ определения текстовых координат по ограничительной рамке?

Учитывая результат вызова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(), но все они просто предлагали вычитать пиксель или два здесь и там, что мне кажется хаком. Что здесь происходит, и почему нам нужно подтасовывать цифры, чтобы все было правильно?

9
задан FtDRbwLXw6 26 July 2012 в 14:27
поделиться