Linux环境下BufferedImage Graphics drawString 乱码解决方法

今天项目在linux服务器上面,登录页的图片验证码显示乱码,本地windows环境正常。

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

写文字进入图片之前必须设置字体

BufferedImage在内存创建的图像调用的是服务器端的字体,所以在生成图片时,

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

如果服务器端找不到对应的中文字体,那么它就识别不了,最后写入图片的中文就变成了乱码、方框、问号等等了。

解决办法:

第一种方法,添加系统中文字体(宋体):
root@dragon-virtual-machine:~# cd /usr/share/fonts
root@dragon-virtual-machine:/usr/share/fonts# mkdir winFonts
root@dragon-virtual-machine:/usr/share/fonts# cp /home/dragon/Desktop/simsun.ttc winFonts
root@dragon-virtual-machine:/usr/share/fonts# cd winFonts
root@dragon-virtual-machine:/usr/share/fonts/winFonts# mkfontdir
root@dragon-virtual-machine:/usr/share/fonts/winFonts# mkfontscale
第二种方法,添加jre中文字体(宋体):
root@dragon-virtual-machine:~# cd /usr/lib/jvm/java-6-sun/jre/lib/fonts
root@dragon-virtual-machine:/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

修改完必须重启服务器才有效。

猜你喜欢

转载自blog.csdn.net/zxgmdzz/article/details/82428712