2016-09-27 27 views
0

我有一個函數可以根據字體大小,字體顏色,文本座標,文本字符串本身和背景圖像成功地將文本插入到圖像中。該功能是完美的。不過,我可以選擇將用戶名與一些示例文本連接起來,以便可以在圖像中生成字符串。這通過兩種不同的方式發生:

1.用戶名+文本 - >這是要在圖像中生成的文本。
2.Text +用戶名 - >這是要在圖像中生成的文本。

這是選項的代碼示例:作爲圖像水印的PHP字符串連接

//option 1 
    $textValue = $username . ' ' . $textValue; 


    //option 2 
    $textValue = $textValue . ' ' . $username; 

所以這應該是可以正常使用的PHP連接了字符串以這種方式(右?) 見下面的圖片結果:

所以你在第一行看到的用戶名是在文本之前,結果是完全正確的,但在第二行,文本被搞砸了。 我使用PHP GD將文本寫入圖像。這與西里爾字符無關。我用西里爾字符進行了測試,問題是一樣的。我已經刪除了測試圖像的實際用戶名,並將其替換爲字符串「用戶名」,以獲得該想法。

+3

檢查字符串的長度是否有所不同,它看起來像文本只是在同一行包裝。 – Matijs

+0

長度沒問題,我使用https://github.com/kus/php-image類進行圖像處理。所選區域在兩個方面都是相同的大小。 –

+0

我的意思是:使用較短的字符串並查看覆蓋效果是否消失。如果是這樣,您將不得不將字符串拆分爲適合圖像長度的部分,並將每個部分的光標的位置重新放置。 – Matijs

回答

2

下次請將代碼放入問題中的評論圖片中。標記代碼和我複製任何內容也更容易。

在您顯示的代碼中(https://i.imgsafe.org/ab071c1bf7.png),您可以調用->textBox()同時指定高度,寬度和fontSize。

如果你忽略了高度,代碼將會在多行中爲你包裝字符串,這是一種解決方案。

此刻,fontSize的大小減小了->fitToWidth()函數,直到它適合爲止。問題是這個函數的工作原理不正確,因爲它不適用於Unicode字符,或者因爲字體本身不能以計算的大小繪製,而且寫得更大。

如果問題是unicode的解決方案可能是確保兩個添加字符串編碼是一樣的使用:

// option 1 
$textValue = mb_convert_encoding($username, 'UTF-8') . 
    mb_convert_encoding(' ', 'UTF-8') . mb_convert_encoding($textValue, 'UTF-8'); 

和:

// option 2 
$textValue = mb_convert_encoding($textValue, 'UTF-8') . 
    mb_convert_encoding(' ', 'UTF-8') . mb_convert_encoding($username, 'UTF-8'); 

也許你可以清除這個代碼up,但重要的是在加入字符串部分之前轉換編碼。在PHP 7之前的PHP沒有'知道'編碼,所有內容都只是PHP函數的一個長字節序列。不同的編碼會導致不同的字節序列,因此您必須將所有內容都轉換爲您需要的確切編碼。

+0

謝謝,老兄,我還在尋找 - > fitToWidth()函數,但在兩種不同的情況下(也是西里爾),同樣的問題是使用用戶名之前之後,編碼與這種情況沒有什麼不同。所以現在我現在問題出在哪裏,但是如何解決? –

+0

爲編碼問題添加了一個可能的解決方法。如果它在字體文件中,恐怕我已經超出了我的深度。 :) – Matijs

+0

你是什麼意思「添加了一個可能的解決方法」 –