概述
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
在数据库中存的是 u6388u6743u7b7eu540duff1a这个样的文字
在页面上还是显示 u6388u6743u7b7eu540duff1a显然是java给转义了
String s = "u5ba2u6237u7b7eu5b57uff1a"; String str = s.replaceAll("\\", "");
现在用 replalaceAll替换一下就好。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。
最后
以上就是孤独冰淇淋为你收集整理的Graphics2D 写图片中文乱码问题及解决的全部内容,希望文章能够帮你解决Graphics2D 写图片中文乱码问题及解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复