【发布时间】:2012-07-25 04:05:24
【问题描述】:
鉴于调用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。这里发生了什么,为什么我们需要捏造数字才能让事情变得正确?
【问题讨论】:
-
这显然是一个非常古老的问题,但我遇到了类似的问题,想知道您是否解决了这个问题?
标签: php text gd bounding-box