(解決)java等環境Kaptcha登陸驗證碼在Linux系統環境下字體亂碼

前言:因本次使用的是java項目。但是理論上在其他項目(python、php等)上也可以解決掉。

一、環境

1、在本地測試好的java系統,打包放至linux系統上。啓動,登陸時,卻發現驗證碼出現亂碼。

    亂碼不盡相同,大家所遇到的亂碼長得可能千差萬別,但萬變不離其宗:亂碼,不可讀,不可用,也看不懂。

二、代碼

1、本次使用的是Producer接口。

         private Producer producer;

         String capText = producer.createText();

         BufferedImage bi = producer.createImage(capText);

2、但是使用Graphics2D 也是可以使用此方法解決的。

        BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);

        Font font = new Font("宋體",Font.PLAIN,20);

        Graphics2D g = bi.createGraphics()

三、解決方法(重點!)

1、在linux環境下,找到/usr/share/fonts/lyx/msam10.ttf,刪掉這個msam10.ttf文件。

2、在自己的window環境下,找到C:\Windows\Fonts\Times New Roman下的4個ttf文件,上傳到linux環境下/usr/share/fonts/lyx/這個目錄下。

3、重啓應用即可解決驗證碼亂碼問題。

四、原因分析

1、因爲是一臺全新的linux系統,所以有些字體是缺失的,導致亂碼的直接原因。(因爲linux默認使用的字體是msam10.ttf)

2、在linux上輸入fc-list,會發現,將4個ttf字體放入前後對比(可以看到linux系統字體明顯多了):

五、複製4個ttf文件可能遇到的問題

1、沒有權限,不讓複製。

解決方法:sudo chmod 777 lyx 給這個文件夾賦權限即可。

六、解決之後上圖一張

七、至此應該沒有什麼問題了。《finish》

(也可以查看一下自己的Java項目使用的是什麼字體,將對應的字體放在fonts/lyx目錄下重啓應用即可。(可有可無))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章