图像的错误高度使用Imagettfbbox()使用脚本字体

时间:2012-10-09 18:31:45

标签: php

我正在生成一些文本的PNG图像(透明背景)。文本将是用户键入的任何内容,使用英语111 Vivace BT(脚本)作为字体。

无论文本有多大,图像总是100像素高,200像素宽。我希望文本水平居中,并尽可能靠近图像顶部。

除了imagettfbbox()似乎为边界框返回不正确的点之外,这一切都工作得很好,它认为文本比实际高,因此在图像的顶部出现一些空白区域,之前文本。

请参阅随附的示例png,我提出了一些红色指南来证明问题。左侧显示高度为38px的指南,这是imagettfbbox()认为是文本高度的指标。右侧显示了一条与文本本身相对应的线条,它只有26px高。

有没有更准确的方法来获得盒子?或者我在这里犯了其他错误?

$text = "A";
$fontSize = 15;
$font = "e111viva-webfont.ttf";
$textColor = convertHexToRGB( "000000" );
$angle = 25;
$image = imagecreatetruecolor( 200,  100 );
$textDimensions = imagettfbbox($fontSize, $angle, $font, $text);
$textHeight = abs($textDimensions[7]);
$textWidth = abs($textDimensions[0]) + abs($textDimensions[2]); // lower left X + lower right X
$textLeft = (200 - $textWidth) / 2;
// center horizontally
$textX = $textDimensions[0] + (imagesx($image) / 2) - ($textDimensions[4] / 2) - 25;
$textY = $textDimensions[1] * 2;
imagesavealpha($image, true);
imagealphablending($image, true);
$transparentColor = imagecolorallocatealpha($image, 0, 0, 0, 127);
$fillResult = imagefill($image, 0, 0, $transparentColor);
$textColor = imagecolorallocate($image, $textColor["r"], $textColor["g"], $textColor["b"]);
$ttfTextResult = imagettftext($image, $fontSize, 0, $textLeft, $textHeight, $textColor, $font, $text);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

incorrect image height

1 个答案:

答案 0 :(得分:0)

发现问题,这是我的错误,我将角度设置为25而不是0.所以PHP认为文本将以一个角度写入,这将使得跨越对角线的高度(和宽度)测量而不是从上到下,从一边到另一边。

当我将角度校正为0时,它工作正常。