Linux 添加中文字體庫,解決Java 生成中文水印不顯示問題


 

本機 Windows 環境測試以下代碼生成中文水印完全沒問題,但是發布到Linux下不顯示,一開始以為是報錯了沒打印出來,搜索發現直接提示中文亂碼的或者不顯示的,才明白原來是字體庫原因,於是開始解決這個問題。

    /**
     * @param srcImgPath 源圖片路徑
     * @param tarImgPath 保存的圖片路徑
     * @param waterMarkContent 文字內容
     * @param markContentColor 文字顏色
     * @param font 字體
     */
    public static void addLetterXY(String srcImgPath, String tarImgPath, String content,Color color,Font font, int x,int y) {

        try {
            // 讀取原圖片信息
            File srcImgFile = new File(srcImgPath);//得到原圖片
            Image srcImg = ImageIO.read(srcImgFile);//文件轉化為圖片
            int srcImgWidth = srcImg.getWidth(null);//獲取圖片的寬
            int srcImgHeight = srcImg.getHeight(null);//獲取圖片的高
            // 加文字
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImg.createGraphics();
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            g.setColor(color); //根據圖片的背景設置水印顏色
            g.setFont(font);              //設置字體

            g.drawString(content, x, y);  //畫出水印
            g.dispose();  
            // 輸出圖片  
            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);  
            ImageIO.write(bufImg, "png", outImgStream);
            outImgStream.flush();  
            outImgStream.close();  
            System.out.println("添加文字完成");              

        } catch (Exception e) {
            System.out.println("生成圖片出錯啦:"+e.getMessage());
        }
    }

 

首先根據介紹了解到,從jdk15版本(即jdk1.5_*) 后,可以自定義字體庫,添加方式如下鏈接:https://blog.csdn.net/nisen6477/article/details/82255435 但實際上在這里添加並沒有作用,使用以下方式輸出tomcat所擁有字體庫,發現添加的字體並不存在。

            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            String[] fontFamilies = ge.getAvailableFontFamilyNames();
            for (String s : fontFamilies) {
               System.out.println(s);
            }

於是又有文章介紹說要在Linux 系統中添加字體庫,添加方式如鏈接:https://blog.csdn.net/myflysun/article/details/78055247  或 https://blog.csdn.net/qq296398300/article/details/70145206

我這只配置到前 5 步就可以了,不需要重啟Linux 或字體服務,步驟總結為以下:

1、檢查字體是否已經安裝:

  fc-list  ----------檢查所有已有的字體

  fc-list :lang=zh -----------只檢查中文

2、到 C:\windows\fonts 復制對應字體庫,微軟雅黑、宋體、黑體等,各文件后綴可能不一樣,有的為ttf,有的為ttc,不影響使用。

3、上傳剛才復制的字體庫到/usr/share/fonts/zh_CN目錄下,如果沒有該目錄,用命令:mkdir /usr/share/fonts/zh_CN  來創建,然后再上傳。

4、修改字體權限,使root以外的用戶可以使用這些字體:chmod -R 777 /usr/share/fonts/zh_CN,使用777 賦予全部權限,chmod 指令可以查看該鏈接:https://www.cnblogs.com/lhm166/articles/6605059.html

5、建立字體緩存:

  mkfontscale

  mkfontdir

  fc-cache -fv

6、重啟 Tomcat,以上文章中有的說要重啟 Linux系統,有的說要重啟字體庫服務,但我都沒有,而且也沒有字體服務,只是重啟了Tomcat 執行后有效。

7、可以再次使用 fc-list 查看字體庫,已經包含了新加入的字體,或者使用上邊的Java 輸出也包含了新字體,打印中文水印也OK。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM