1. 程式人生 > >Linux環境下BufferedImage Graphics drawString 亂碼解決方法

Linux環境下BufferedImage Graphics drawString 亂碼解決方法

今天專案在linux伺服器上面,登入頁的圖片驗證碼顯示亂碼,本地windows環境正常。

g.setFont(new Font("Candara", Font.BOLD, 24));

寫文字進入圖片之前必須設定字型

BufferedImage在記憶體建立的影象呼叫的是伺服器端的字型,所以在生成圖片時,

g.drawString("文字內容", 8, 24);

如果伺服器端找不到對應的中文字型,那麼它就識別不了,最後寫入圖片的中文就變成了亂碼、方框、問號等等了。

解決辦法:

第一種方法,新增系統中文字型(宋體):
[email protected]:~# cd /usr/share/fonts

[email protected]:/usr/share/fonts# mkdir winFonts
[email protected]:/usr/share/fonts# cp /home/dragon/Desktop/simsun.ttc winFonts
[email protected]:/usr/share/fonts# cd winFonts
[email protected]:/usr/share/fonts/winFonts# mkfontdir
[email protected]:/usr/share/fonts/winFonts# mkfontscale
第二種方法,新增jre中文字型(宋體):
[email protected]
:~# cd /usr/lib/jvm/java-6-sun/jre/lib/fonts
[email protected]:/usr/lib/jvm/java-6-sun/jre/lib/fonts# cp /home/dragon/Desktop/simsun.ttc .

windows下直接複製字型檔案到jre字型目錄:

C:\Program Files\Java\jdk1.8.0_161\jre\lib\fonts

修改完必須重啟伺服器才有效。