java画图使用字体出现的问题

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

猜你喜欢

转载自blog.csdn.net/fengchao2016/article/details/79159478