Graphics2D 写图片中文乱码问题

0 概述

由于工作的需求,需要往图片写字,写中文的时候出现了乱码,网上找了很多资料都不行,后来自己不断尝试,最终发现由于Font 的name设置问题导致的乱码。

1 问题原因&解决

字形类Font用于规范组件所使用的字形大小、样式和字体等。其构造函数:
public Font(String name,int style,int size);
name表示本地可获取字体名称
style表示字体样式,包含Font.PLAIN,Font.BOLD,Font.ITALIC三种,分别对应平体、加粗和斜体。 可见Font name不能随便设置
查看服务器支持哪些字体

   GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fa=ge.getAvailableFontFamilyNames();
        for (String s:fa) {
            System.out.println(s);
        }

如果服务器不存在想要的字体,通过网上下载或者其他系统拷贝(例如 宋体字体文件simsun.ttc simsun.ttf)将其通过ftp上传到服务器并拷贝到/usr/local/jdk/jre/lib/fonts/ 目录下(jdk 安装目录 ),然后重启下java进程即可。
测试代码

        BufferedImage buffImg = ImageIO.read(new File("/tmp/1.jpg"));
        Graphics2D g = buffImg.createGraphics();
        g.setColor(Color.BLACK);
        Font f = new Font("宋体",Font.PLAIN, 30);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g.setFont(f);
        FontMetrics fm = g.getFontMetrics(f);
        g.drawString("中31国", 100, 100);
        ImageIO.write(buffImg, FORMAT, new File("/tmp/test.jpg"));

参考文献
http://blog.csdn.net/caixiexin/article/details/6608950

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值