Linux 添加中文字体库,解决Java 生成中文水印不显示问题
本机 Windows 环境测试以下代码生成中文水印完全没问题,但是发布到Linux下不显示,一开始以为是报错了没打印出来,搜索发现直接提示中文乱码的或者不显示的,才明白原来是字体库原因,于是开始解决这个问题。
- /**
- * @param srcImgPath 源图片路径
- * @param tarImgPath 保存的图片路径
- * @param waterMarkContent 文字内容
- * @param markContentColor 文字颜色
- * @param font 字体
- */
- public static void addLetterXY(String srcImgPath, String tarImgPath, String content,Color color,Font font, int x,int y) {
- try {
- // 读取原图片信息
- File srcImgFile = new File(srcImgPath);//得到原图片
- Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
- int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
- int srcImgHeight = srcImg.getHeight(null);//获取图片的高
- // 加文字
- BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
- Graphics2D g = bufImg.createGraphics();
- g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
- g.setColor(color); //根据图片的背景设置水印颜色
- g.setFont(font); //设置字体
- g.drawString(content, x, y); //画出水印
- g.dispose();
- // 输出图片
- FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
- ImageIO.write(bufImg, "png", outImgStream);
- outImgStream.flush();
- outImgStream.close();
- System.out.println("添加文字完成");
- } catch (Exception e) {
- System.out.println("生成图片出错啦:"+e.getMessage());
- }
- }
首先根据介绍了解到,从jdk15版本(即jdk1.5_*) 后,可以自定义字体库,添加方式如下链接:https://blog.csdn.net/nisen6477/article/details/82255435 但实际上在这里添加并没有作用,使用以下方式输出tomcat所拥有字体库,发现添加的字体并不存在。
- GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
- String[] fontFamilies = ge.getAvailableFontFamilyNames();
- for (String s : fontFamilies) {
- System.out.println(s);
- }
于是又有文章介绍说要在Linux 系统中添加字体库,添加方式如链接:https://blog.csdn.net/myflysun/article/details/78055247 或 https://blog.csdn.net/qq296398300/article/details/70145206
我这只配置到前 5 步就可以了,不需要重启Linux 或字体服务,步骤总结为以下:
1、检查字体是否已经安装:
fc-list ----------检查所有已有的字体
fc-list :lang=zh -----------只检查中文
2、到 C:\windows\fonts 复制对应字体库,微软雅黑、宋体、黑体等,各文件后缀可能不一样,有的为ttf,有的为ttc,不影响使用。
3、上传刚才复制的字体库到/usr/share/fonts/zh_CN目录下,如果没有该目录,用命令:mkdir /usr/share/fonts/zh_CN 来创建,然后再上传。
4、修改字体权限,使root以外的用户可以使用这些字体:chmod -R 777 /usr/share/fonts/zh_CN,使用777 赋予全部权限,chmod 指令可以查看该链接:https://www.cnblogs.com/lhm166/articles/6605059.html
5、建立字体缓存:
mkfontscale
mkfontdir
fc-cache -fv
6、重启 Tomcat,以上文章中有的说要重启 Linux系统,有的说要重启字体库服务,但我都没有,而且也没有字体服务,只是重启了Tomcat 执行后有效。
7、可以再次使用 fc-list 查看字体库,已经包含了新加入的字体,或者使用上边的Java 输出也包含了新字体,打印中文水印也OK。
Linux 添加中文字体库,解决Java 生成中文水印不显示问题的更多相关文章
- CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
1 下载字体 可以在网上下载,也可以在 windows 目录下(C:\Windows\Fonts)找到对应字体,这里是从另一套系统上 copy simsun.ttf 文件. 2 查看当前系统中已安装的 ...
- 对linux安装中文字体库
问题描述: linux提供的web服务,能在网页展示中文,下载pdf出现中文无法读取!,甚是迷瞪,经分析展示是本地浏览器的解析,下载pdf是服务器端的响应,因此要在服务端安装对应的字体库就可以解决此问 ...
- LINUX CentOS7安装字体库
LINUX CentOS7安装字体库 2017年12月26日 17:06:07 q260996583 阅读数:4866更多 个人分类: linux JAVA画图时常用到Font 类对象 这样的对象 ...
- AndroidStudio开发Java工程(解决java控制台中文打印乱码+导入jar包运行工程)
这篇分享一点个人AS开发java工程经验,虽然有时候还是得打开eclipse来运行java项目,但能用AS的时候还是尽量用AS,毕竟一个字,爽~ 废话不多说,进入正题. 一.开发Java工程 你有两种 ...
- js url传值中文乱码完美解决(JAVA)
js url传值中文乱码完美解决(JAVA) 首先在你的jsp页面这样更改: var url="你要传入的Action的位置&ipid="+ipid+"& ...
- Linux(Centos)安装中文字体库(文档中文字符不显示)
yum -y install fontconfig 在/usr/shared/fonts目录下新建一个目录chinese 然后打开windows本地的字体库 将这里面的所有文件上传到centos里我们 ...
- linux CentOS7 安装字体库-转
前言 报表中发现有中文乱码和中文字体不整齐(重叠)的情况,首先考虑的就是操作系统是否有中文字体,在CentOS 7中发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体库 ...
- CentOS 7.6环境下安装中文字体库
JAVA画图时常用到Font 类对象 这样的对象依赖于本地的字段.新装的linux没有安装字段库,和相应的字体. 1.fc-list查看字体库 2.yum -y install fontconfig安 ...
- Sass、Less编译器koala及koala不支持中文字体的解决方法
一款很好用的Sass编译器,还可以编译Less.coffeescript等 去官网下载适合自己电脑的版本 http://koala-app.com/index-zh.html 打开后拖动或者打开项目目 ...
随机推荐
- windows 端口转发
1.添加端口转发 netsh interface portproxy add v4tov4 listenport=5000 listenaddress=10.30.3.148 connectport= ...
- Linux内核中常用的数据结构和算法(转)
知乎链接:https://zhuanlan.zhihu.com/p/58087261 Linux内核代码中广泛使用了数据结构和算法,其中最常用的两个是链表和红黑树. 链表 Linux内核代码大量使用了 ...
- 写好的Java代码在命令窗口运行——总结
步骤: 1.快捷键 win+r,在窗口中输入cmd,enter键进入DOS窗口. 2.假设写好的代码的目录为:D:\ACM 在DOS中依次写入:cd d: cd ACM 利用cd切换到代码文件所在的目 ...
- Excel--截取所需内容
如上图,需截取*号后的数字,那么公式怎么写: 1.使用Find和Mid函数: FIND:获取指定字符所在字串的位置: MID:截取字串中的子串. 写法: 2.也可以使用Replace函数代替mid函数 ...
- Ubuntu16.04下安装elasticsearch+kibana实现php客户端的中文分词
1.下载安装java, elasticsearch和kibana apt-get install default-jre default-jdk wget https://artifacts.elas ...
- 作业---修改haproxy配置文件
#查询 f=open("C:\\aaaaaaaaaaaaa\\haproxy.txt", "r", encoding="utf-8") ha ...
- Spring中的接口BeanFactory和FactoryBean的学习
BeanFactory: 相当于对象工厂,可以获取对象的实例以及相应的属性.BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接口,也就是Spring IOC所遵 ...
- python列表生成式
在Python编程中,list列表应用的比较广泛,而列表生成式是一个非常强大但是使用很简单的功能. 比如要生成1到100的数组列表[1,2,3,4......,97,98,99,100],可以使用li ...
- SSIS 中将csv 文件批量导出到excel 文件,并设置excel 文件中某些列的data column format 为Text
csv 文件是文本文件类型,但是打开csv 文件后(默认使用本地已经安装的excel 来打开excel 文件),默认显示出来的是general 类型(column data format)的数据, 这 ...
- nginx1.14.0日志打印
nginx日志打印 http属性log_format来设置日志格式 ,参考 https://www.jb51.net/article/52573.htm <nginx日志配置指令详解> ...