今天项目在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
修改完必须重启服务器才有效。