给定调用
我正在从边框中确定宽度/高度和基线的x/y,如下所示:
之后,我绘制了文本:
然而,这会导致文本超出矩形框一两个像素。我看过 PHP 的 imagettfbbox() 文档中对此问题的几次尝试,但它们都只是建议在这里或那里减去一两个像素,这对我来说似乎是一种欺骗行为。发生了什么事?为什么我们需要虚拟数字才能做到正确呢?
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() 文档中对此问题的几次尝试,但它们都只是建议在这里或那里减去一两个像素,这对我来说似乎是一种欺骗行为。发生了什么事?为什么我们需要虚拟数字才能做到正确呢?