2012-10-09 26 views
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); 

incorrect image height

回答

0

發現了這個問題,這是我的錯,我的角度設置爲25,而不是0,所以PHP思文將要被一個角度寫,這將使高度(和寬度)跨越對角線測量,而不是從上到下和從一側到另一側。

不久,我將角度修正爲0,它工作正常。

相關問題