问题描述
需求,在一张图片的上面绘制中文昵称。代码如下
//绘制昵称
Font font = new Font("宋体", Font.BOLD, 34);
graphics.setColor(Color.BLACK);
graphics.setFont(font);
graphics.drawString(userName,300 , 200);
最后绘制出来是几个框框
解决方法
一般不是编码问题,有网友说用unicode编码,试过后绘制出来也不是中文。
我这边的问题就是,Linux CentOS上没有这个中文字体,导致无法绘制。
所以下面是介绍字体的安装过程,CentOS为例
- 获取字体
simsun.ttf
–宋体为例, 这里可以在Windows或者mac上获取,没有直接网上下载,格式ttc直接改为ttf。【宋体 - 字体下载】 - 上传到CentOS上的字体库
新建一个目录/usr/share/fonts/chinese
,把刚才的simsun.ttf
上传到这个目录下。 - 创建字体索引(无需重启操作系统)
mkfontdir /usr/share/fonts/chinese
mkfontscale /usr/share/fonts/chinese
如果上面命令出错,先安装字体工具
yum install mkfontscale/mkfontdir
- 在代码中这样使用,引用字体就用‘宋体’引用即可
Font font = new Font("宋体", Font.BOLD, 34);
graphics.setColor(Color.BLACK);
graphics.setFont(font);
graphics.drawString(userName,300 , 200);
另外附上如何检查本地安装了哪些字体的代码
System.out.println("支持的字体-------------");
Font[] fonts = GraphicsEnvironment
.getLocalGraphicsEnvironment().getAllFonts();
for (Font f : fonts) {
System.out.println("Name:" + f.getFontName());
}
System.out.println("支持的字体-------------");