4

我使用imagettftext()在圖像上寫入動態文本,並且希望它適合我的圖像寬度。imagettftext():計算字體大小以確保文本適合圖像寬度

如何通過文本長度計算字體大小?

+0

除非是等寬字體,否則不能通過文本長度計算字體大小。並沒有很好的近似。所有W的字符串將佔用比我所有字符串更多的空間。 –

回答

11

在輸出imagettfbbox函數之前,可以計算TTF文本的邊界框。不幸的是,沒有直接的縮放方式來適應寬度,所以你必須自己做。

這樣做的一種方法是將默認字體大小爲20的文本傳遞到imagettfbbox並從中檢索寬度。然後,您可以計算通過計算比例因子多少較小或較大的文字應該是適合你想要的大小:使用

fontSize = 20 * scale; 

scale = targetWidth/bboxWidth; 

然後繪製一個合適大小的文本imagettftext功能。字體不能以這種方式完美地縮放100%,但您會得到非常好的近似值。

請參閱文檔imagettfboxhere

+0

它的工作很棒!謝謝! – Asaf

+0

要使比例100%完美,您可以使用字體40進行第二遍,並根據相同輸入字符串的20和40字體大小之間的差異計算比例。 – Programista

+0

也幫助過我.... – arun

-1
while (itsTooBigAccordingToimagettftext() && $fontSize > 0) { 
    $fontSize--; 
} 
+2

這將導致「致命錯誤:調用未定義函數itsTooBigAccordingToimagettftext()」。換句話說,請給出一個更好的解答,而不是使用半碼:-) –

+1

Stackoverflow是一個你應該得到指導的地方,而不是一個完整的工作代碼。對我來說這是很好的指導,唯一的錯誤是它應該讀取'itsTooBigAccordingToimagettfbbox()'而不是'itsTooBigAccordingToimagettftext()';-) – Capsule

+1

警告:如果您不小心,*會導致長時間延遲。 – starbeamrainbowlabs

相關問題