1
我正在生成一些文本的PNG圖像(透明背景)。文本將是用戶輸入的任何內容,使用英文111 Vivace BT(腳本)作爲字體。錯誤的高度圖像使用Imagettfbbox()與腳本字體
無論文字大小如何,圖像始終是100px高,寬200px。我希望文本水平居中並儘可能靠近圖像的頂部。
這一切工作通常很好,除了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);