首頁 >後端開發 >PHP問題 >php imagestring 中文亂碼怎麼辦

php imagestring 中文亂碼怎麼辦

藏色散人
藏色散人原創
2020-08-19 09:32:483064瀏覽

php imagestring中文亂碼是因為GD2函式庫本身沒有中文字體導致的,其解決方法就是要指定字型來顯示所輸出的字串即可。

php imagestring 中文亂碼怎麼辦

推薦:《PHP影片教學

imagestring函數顯示中文亂碼

1.問題描述

    在學到給圖片打浮水印時,使用了PHP內建的GD擴充函數庫,影片教學的imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )函數,在實際應用中發現函數無法正常顯示中文浮水印,顯示中文亂碼。

2.解決過程

        透過查詢官網PHP手冊,imagestring:水平地畫一行字串,imagestring() 用col 顏色將字串s 畫到image 所代表的圖像的x ,y 座標處(這是字串左上角座標,整個圖像的左上角為0,0)。如果font 是 1,2,3,4 或 5,則使用內建字體。

        此函數的第二個參數$font是字體參數,但官方只說明了該值設定為1-5的話使用內建字體,而透過測試發現所謂的1-5內建字體都不能正常顯示中文。而且官方文件並沒有說明能否使用1-5以外的其他值和其他字體文件,測試發現當把該參數設定為其他字體文件時無法正常使用。

   

        網路上查詢相關內容,發現大多數情況,無法顯示中文都是因為GD2函式庫本身沒有文字主體所造成的,所以要指定字體來顯示所輸出的字串。如果要在圖片上輸出中文,應該使用imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )函數。此函數的官方說明為:用 TrueType 字體寫入圖像

        此函數的第二個參數也為字體文件,應該指向一個ttf格式的字體文件,透過測試發現可以正常顯示中文。 $font 為此字型檔案路徑,當字型件放在該php檔案同級目錄下時即為字型檔名。

        另外在PHP手冊中發現還有一個imagefttext (resource$image , float$size ,float$angle ,int$x ,int$y ,int$color ,string$fontfile ,string$text [, array$extrainfo ] )t函數,

        此函數的正式說明為:使用FreeType 2 字體將文字寫入圖像,十分類似與上面的imagettftext函數。只是引用的字型檔型別不同,所以maybe用這個函數也可以顯示中文。不過懶得去試了。 。 。有興趣的可以試試。

        偶然發現在Ubuntu系統下,將使用到的字體檔案放在該php同級目錄下,$font 為該檔案名稱時發現該函數無法正常生效,透過查詢錯誤日誌發現imagettftext() : Could not find/open font,透過百度查詢了解到,在Linux系統中,僅將$font設為檔案名稱是不行的,還要明確路徑,如'./xxx.ttf'(相對路徑)或' /usr/share/fonts/xxx.ttf'(絕對路徑)。測試發現可以正常顯示。

3.總​​結:

imagestring幾乎無法正常顯示中文,也許有其他方法吧。不過推薦使用imagettftext,簡單方便,只要引入一個字型檔即可。

imagettftext函數的$font參數在window系統中只需設定為文件名即會在當前目錄下去尋找該字體文件,但在linux系統中還要指明路徑即 ./ 。

以上是php imagestring 中文亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn