阅读 32 SEO

Graphics2D 写图片中文乱码问题及解决

这篇文章主要介绍了Graphics2D 写图片中文乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


目录
  • Graphics2D 写图片中文乱码

    • 概述

    • 问题原因&解决

  • Graphics2D 显示文字时乱码


    Graphics2D 写图片中文乱码


    概述

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


    问题原因&解决

    字形类Font用于规范组件所使用的字形大小、样式和字体等。其构造函数:

    1
    public Font(String name,int style,int size);
    • name表示本地可获取字体名称

    • style表示字体样式,包含Font.PLAIN,Font.BOLD,Font.ITALIC三种,分别对应平体、加粗和斜体。 可见Font name不能随便设置

    查看服务器支持哪些字体

    1
    2
    3
    4
    5
    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进程即可。

    测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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"));


    Graphics2D 显示文字时乱码

    Graphics2D 显示文字时乱码,一种方案是在服务器上添加字体

    一种是,把汉字转为unicode

    在数据库中存的是 \u6388\u6743\u7b7e\u540d\uff1a这个样的文字

    在页面上还是显示 \u6388\u6743\u7b7e\u540d\uff1a显然是java给转义了

    1
    2
    String s = "\u5ba2\u6237\u7b7e\u5b57\uff1a";
    String str = s.replaceAll("\\\\", "");

    现在用 replalaceAll替换一下就好。

    以上为个人经验,希望能给大家一个参考

    原文链接:https://blog.csdn.net/huangshanchun/article/details/79438363


    文章分类
    代码人生
    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 gxwowoo@163.com 举报,一经查实,本站将立刻删除。
    相关推荐