Graphics2D 寫圖片中文亂碼問題及解決
Graphics2D 寫圖片中文亂碼
概述
由於工作的需求,需要往圖片寫字,寫中文的時候出現瞭亂碼,網上找瞭很多資料都不行,後來自己不斷嘗試,最終發現由於Font 的name設置問題導致的亂碼。
問題原因&解決
字形類Font用於規范組件所使用的字形大小、樣式和字體等。其構造函數:
public Font(String name,int style,int size);
name
表示本地可獲取字體名稱style
表示字體樣式,包含Font.PLAIN,Font.BOLD,Font.ITALIC三種,分別對應平體、加粗和斜體。 可見Font name不能隨便設置
查看服務器支持哪些字體
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fa=ge.getAvailableFontFamilyNames(); for (String s:fa) { System.out.println(s); }
如果服務器不存在想要的字體,通過網上下載或者其他系統拷貝(例如 宋體字體文件simsun.ttc simsun.ttf)將其通過ftp上傳到服務器並拷貝到/usr/local/jdk/jre/lib/fonts/ 目錄下(jdk 安裝目錄 ),然後重啟下java進程即可。
測試代碼
BufferedImage buffImg = ImageIO.read(new File("/tmp/1.jpg")); Graphics2D g = buffImg.createGraphics(); g.setColor(Color.BLACK); Font f = new Font("宋體",Font.PLAIN, 30); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setFont(f); FontMetrics fm = g.getFontMetrics(f); g.drawString("中31國", 100, 100); ImageIO.write(buffImg, FORMAT, new File("/tmp/test.jpg"));
Graphics2D 顯示文字時亂碼
Graphics2D 顯示文字時亂碼,一種方案是在服務器上添加字體
一種是,把漢字轉為unicode
在數據庫中存的是 \u6388\u6743\u7b7e\u540d\uff1a這個樣的文字
在頁面上還是顯示 \u6388\u6743\u7b7e\u540d\uff1a顯然是java給轉義瞭
String s = "\u5ba2\u6237\u7b7e\u5b57\uff1a"; String str = s.replaceAll("\\\\", "");
現在用 replalaceAll替換一下就好。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。