使用 TrueType 字体时,您可以使用imageftbbox http://php.net/imageftbbox函数获取使用您的字体排版的字符串的边界框。边界框给出了从基点到文本占据的矩形的四个角的偏移量。所以如果你将边界框存储在$bb
并使用imagefttext
将文本放在($x, $y)
,那么角点将具有以下坐标:
($x + $bb[6], $y + $bb[7]) ($x + $bb[4], $y + $bb[5])
+-------+
| Hello |
+-------+
($x + $bb[0], $y + $bb[1]) ($x + $bb[2], $y + $bb[3])
这告诉我们我们想要的图像宽度为($x + $bb[2]) - ($x + $bb[6]) = $bb[2] - $bb[6]
类似地,图像高度为$bb[3] - $bb[7]
。然后应该在坐标处渲染文本(-$bb[6], -$bb[7])
在那张图片里面,因为我们想要
(0, 0) = ($x + $bb[6], $y + $bb[7]) ==> $x = -$bb[6] and $y = -$bb[7]
你可以用这段代码尝试一下。将其放入名为的文件中img.php
并浏览至img.php?q=Hello
去测试:
<?php
header("Content-type: image/png");
$q = $_REQUEST['q'];
$font = "Impact.ttf";
$size = 30;
$bbox = imageftbbox($size, 0, $font, $q);
$width = $bbox[2] - $bbox[6];
$height = $bbox[3] - $bbox[7];
$im = imagecreatetruecolor($width, $height);
$green = imagecolorallocate($im, 60, 240, 60);
imagefttext($im, $size, 0, -$bbox[6], -$bbox[7], $green, $font, $q);
imagepng($im);
imagedestroy($im);
?>
如果您使用位图字体,请查看imagefontwidth http://php.net/imagefontwidth and imagefontheight http://php.net/imagefontheight功能。