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

 更新时间:2021年11月12日 15:26:24   作者:huangshanchun  
这篇文章主要介绍了Graphics2D 写图片中文乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Graphics2D 写图片中文乱码

概述

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

问题原因&解决

字形类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"));

Graphics2D 显示文字时乱码

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

一种是,把汉字转为unicode

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

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

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

现在用 replalaceAll替换一下就好。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在Springboot中Mybatis与Mybatis-plus的区别详解

    在Springboot中Mybatis与Mybatis-plus的区别详解

    MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,MyBatisPlus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生,本文将给大家介绍了在Springboot中Mybatis与Mybatis-plus的区别
    2023-12-12
  • Spring Boot 中的 @HystrixCommand 注解原理及使用方法

    Spring Boot 中的 @HystrixCommand 注解原理及使用方法

    通过使用 @HystrixCommand 注解,我们可以轻松地实现对方法的隔离和监控,从而提高系统的可靠性和稳定性,本文介绍了Spring Boot 中的@HystrixCommand注解是什么,其原理以及如何使用,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • java如何删除以逗号隔开的字符串中某一个值

    java如何删除以逗号隔开的字符串中某一个值

    这篇文章主要介绍了java如何删除以逗号隔开的字符串中某一个值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java软件设计模式之适配器模式详解

    Java软件设计模式之适配器模式详解

    这篇文章主要介绍了Java软件设计模式之适配器模式详解,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系,需要的朋友可以参考下
    2023-07-07
  • 基于Java字符编码的使用详解

    基于Java字符编码的使用详解

    本篇文章对Java字符编码的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • Hibernate初体验及简单错误排除代码详解

    Hibernate初体验及简单错误排除代码详解

    这篇文章主要介绍了Hibernate初体验及简单错误排除代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • SpringBoot 如何实现异步编程

    SpringBoot 如何实现异步编程

    在SpringBoot的日常开发中,一般都是同步调用的,但实际中有很多场景非常适合使用异步来处理,本文就详细的介绍一下SpringBoot 如何实现异步编程 ,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12
  • Java中Maven Shade插件的具体使用

    Java中Maven Shade插件的具体使用

    Maven Shade插件它可以帮助你在构建项目时打包所有依赖项,并将其打包到一个单独的JAR文件中,本文就介绍一下Maven Shade插件的具体使用,具有一定参考价值,感兴趣的可以了解一下
    2023-08-08
  • Spring注解驱动扩展原理BeanFactoryPostProcessor

    Spring注解驱动扩展原理BeanFactoryPostProcessor

    这篇文章主要介绍了Spring注解驱动扩展原理BeanFactoryPostProcessor,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 分享Java8中通过Stream对列表进行去重的实现

    分享Java8中通过Stream对列表进行去重的实现

    本文主要介绍了分享Java8中通过Stream对列表进行去重的实现,包括两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论