给定调用的结果,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()
,但他们都只是建议在这里和那里减去一两个像素,这对我来说似乎是一种 hack。这里发生了什么,为什么我们需要捏造数字才能让事情变得正确?