欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-02 21:00:51
目录graphics2d 写图片中文乱码概述问题原因&解决graphics2d 显示文字时乱码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替换一下就好。

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