1.問題:
window環境下測試都沒問題, 代碼更新到linux服務器上, 發現生成圖片後中文字體不顯示?
2.分析: ( 相關代碼如下 )
跟linux系統有關係? 最後查找發現是Linux服務器上沒有相應字體類型導致的. 因爲圖片是在linux下的系統裏生成的,用到java.awt.Font這個類。實例化的時候它會到jre裏去找字體,如果找不到對應字體,就會顯示不出來。
// 在圖片上寫文字!
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, null);
// 字體、字型、字號大小.
g.setFont(new Font("仿宋", Font.PLAIN, fontSize));
// 指定位置畫文字
g.drawString("啦啦", 100, 100);
g.dispose();
3.解決如下:
前提: 先在本地Windows下找到字體文件:
解決一、在jre中添加相應的字體。( 沒有試 )
1.找到Java運行環境安裝目錄( /user/…/jre/lib/fonts ) , 放到jre下面.
2.創建一個文件夾. ( mkdir winFonts )
3.重啓tomcat服務器. ( 重點 - 不重啓不生效. )
解決二、在Linux系統中添加字體文件。 ( 親測有效 )
1.在 該目錄下( /usr/share/fonts ) 創建文件夾 winFonts.(文件夾名稱隨意)
2.複製需要添加的字體文件(參考3.1)到新創建的文件夾下.
3.刷新字體:fc-cache
4.查看字體:fc-list
5.重啓tomcat服務器. ( 重點 - 不重啓不生效. )
常見問題?
1.若fc-list沒看到添加的字體,有可能是此字體受版權保護無法添加進去,建議換成免費字體。
2.添加字體後不會馬上生效,需要重啓服務器。