1

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

无论文本有多大,图像始终为 100px 高 x 200px 宽。我希望文本水平居中并尽可能靠近图像顶部。

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

请看附件的例子png,我画了一些红色的指引来演示这个问题。左侧显示了 38px 高的准线,这就是 imagettfbbox() 认为的文本高度。右侧显示了一条针对文本本身测量的线,它只有 26 像素高。

有没有更准确的方法来获取盒子?还是我在这里犯了其他错误?

$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);

图像高度不正确

4

1 回答 1

0

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

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

于 2012-10-09T20:47:25.970 回答