我想写一个脚本,从文本,大小和它获得的$ _GET参数中的字体生成一个PNG图像,但我不知道如何使图像的大小完全符合文本。我已经在使用imagettfbox:PHP GD imagettftext测量
$widthPx = abs($ttfBox[2] - $ttfBox[0]);
$heightPx = abs($ttfBox[1] - $ttfBox[7]);
这可能会给我正确的测量结果,但是当我绘制文本时,它会出现一些超出范围的情况。例如,如果我尝试使用arial.ttf绘制一个“a”,它至少有5个像素越界。有没有一种方法可以在没有测试的情况下绘制完全适合图像的任何字体的文本?
$text = $_GET["text"];
$cmToPixel = 15.0;
$sizeCm = floatval($_GET["sizeCm"]);
$sizePx = $cmToPixel * $sizeCm;
$fontFile = "fonts/".pathinfo($_GET["font"])["filename"].".".pathinfo($_GET["font"])["extension"];
if(!file_exists($fontFile)){
die;
}
$ttfBox = imagettfbbox($sizePx, 0, $fontFile, $text);
$widthPx = abs($ttfBox[2] - $ttfBox[0]);
$heightPx = abs($ttfBox[1] - $ttfBox[7]);
$image = ImageCreate($widthPx, $heightPx);
$x = $ttfBox[0] + (imagesx($image)-$ttfBox[4])/ 2 - 0;
$y = $ttfBox[1] + (imagesy($image)/2) - ($ttfBox[5]/2) - 5;
ImageRectangle($image,0,0,imagesx($image),imagesy($image), ImageColorAllocate($image,255,255,255));
imagettftext($image, $sizePx,0,$x,$y, ImageColorAllocate($image, 0, 0, 0), $fontFile, $text);
header("Content-Type: image/png");
ImagePng($image);
ImageDestroy($image);
您是否查看了本手册提供的示例?他们可能会帮助:[imagettfbbox - 使用TrueType字体给文本的边界框](http://php.net/manual/en/function.imagettfbbox.php) – 2015-02-08 02:53:14
我已经看过所有的例子,它似乎我必须通过测试像素颜色来修剪图像,因为文本输出太不准确了。当我绘制它时,每个文本都有不同的偏移量,所以它总是超出范围。 – user1563232 2015-02-08 08:54:07
是否可以发布您使用的代码,以便我们可以试用它? – 2015-02-08 09:00:51