java是门跨平台的语音,众所周知,但是使用java底层画图的API,比如jfreechart,Graphics等,会发现使用中文的字体出现如下类似的情况:
此问题原因归咎于:系统本身不支持中文的字体。
检测系统平台的两个工具类:
import java.awt.*;
/**
* Created by fengch on 2018/1/24.
*/
public class FontTest {
public static void main(String[] args) {
Font[] fonts = GraphicsEnvironment
.getLocalGraphicsEnvironment().getAllFonts();
for (Font f : fonts) {
System.out.println("Name:" + f.getFontName());
}
}
}
编译,执行,查看系统所以得font字体有哪些。
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
/**
* Created by fengch on 2018/1/24.
*/
public class ImageTester {
public static void generate(String fileName) throws Exception {
BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
String fontType = "宋体";
g.setFont(new Font(fontType , Font.BOLD, 22));
g.drawString("你好我好", 30, 30);
g.drawString("\u5b8b\u4f53", 30, 80);
ImageIO.write(image, "JPEG", new FileOutputStream(new File(fileName)));
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
generate(args[0]);
}
}
已中文宋体为例子,检测生成的图片看字体是否出现异常。
若出现已上问题,说明系统没有对应的字体格式,以centos系统为例子,解决方式如下:
一、复制字体
在“C:\Windows\Fonts”目录下找到所要安装字体,这里以“simsun.ttf”为例。如果安装的字体找不到,就去网上下载。
二、上传字体至CentOS系统
在/usr/share/fonts目录下建立一个子目录,比如/winFonts。上传“simsun.ttf”字体至此目录。
三、进入此目录安装
# cd /usr/share/fonts/winFonts
运行以下命令建立字体索引信息,更新字体缓存::
# sudo mkfontscale
# sudo mkfontdir
# sudo fc-cache -fv
执行以下命令让字体生效
# source /etc/profile
问题:
1.若提示 “ mkfontscale: command not found”,用yum安装:
# yum install mkfontscale
- 1
- 1
2.提示 “ fc-cache: command not found”
# yum install fontconfig