2012-05-20 17 views
1

我的網站有一個圖片生成器。它允許訪問者在圖像上編寫自定義文本。用PHP和GD在圖片上書寫文字

我通過顯示圖片和使用Javascript來處理這種情況,以便他們可以在圖片上書寫(預覽圖片的樣子)。按下提交後,我會得到x & y座標,文本和字體大小。

(我也支持多重字體大小)

寫作的圖片上的文字我使用ImageTTFText功能。

好吧,到目前爲止一切都很好。現在我遇到的問題是如何知道句子何時太長而不能適合一行。我遇到了wordwrap函數,但它不可靠。它根據字符的數量分割句子。但是,例如,如果您鍵入'I'十次,'D'十次,您會看到寬度有所不同。

好吧,然後我碰到了ImageTTFBBox這將計算框的大小,所以我會知道它什麼時候太長。那麼這很好,但我怎麼能分裂這句話呢? (用文字)。

如果有人能給我一個答案,我將非常感激。

回答

0

我的邏輯是儘可能在每一行添加儘可能多的單詞而不必削減單詞。所以,我會在一行中添加一個字,用ImageTTFBBox()檢查它的渲染大小,然後重複直到行溢出(然後明顯移除導致溢出的字)。如果遇到線路溢出並且線路上只有一個字的情況,那麼您必須切斷該字。你會多次致電ImageTTFBBox()

0

如果您使用的是HTML5,在發送之前,您可以要求Javascript給予一些幫助。假設你有一個帆布(甚至在代碼中創建)和上下文ctxt你可以這樣做:

ctxt.font = "14pt Arial"; 
ctxt.textAlign = "left"; 
ctxt.fillStyle = "#000"; 
ctxt.fillText(text, x, y); 
var metrics = ctxt.measureText(text); 
var width = metrics.width; 

現在你知道你的文字有多寬,並且可以做一些基本的自動換行。假設您的有效寬度(圖像寬度減去內邊距)爲180像素,文本寬度爲679像素。這是一個+/- 25%的比例(26.05%)。使用該比率來提取句子的前25%,看它是否適合寬度,繪製並沿着一條線向下移動。