Java图片添加中文水印无法正常显示
问题:
因业务需要,需要在图片上生成中文水印然后输出图片。一开在window啪啪的敲了一会,so easy。当发布到Linux系统中的docker的时候,这时候中文字体都变成了一个个白框。无法正常显示。
原因:
在使用Graphics2D时,设置的字体,在该系统中无法识别该字体,或者是不支持中文字体。
解决过程:
1、一开始以为直接在Linux系统中没有安装字体,然后就
执行安装字体命令:
yum -y install fontconfig
查看linux已安装字体:
fc-list
查看linux已安装中文字体:
fc-list :lang=zh
此时是执行fc-list :lang=zh查看是没有中文字体的,然后再复制一些中文字体到服务器的/usr/share/fonts/目录,接着清楚缓存,重新加载字体:fc-cache -vf。
一番操作下来,fc-list :lang=zh可以查看到有支持的中文字体了。此时心中是一番激动,高兴的以为搞定了,一测试懵逼。还是一堆框框。
2、开始第二轮的研究,每个docker都是一个单独的离线环境,尝试把字体拷贝到容器环境所在的系统字体目录(注意:要把字体放到和DockerFile同一目录下)。
然后在DockerFile中加入命令:
COPY msyh.ttc /usr/share/fonts/msyh.ttc
但是没有效果。
可能是docker中没有安装字体,然后进入docker中执行fc-list查看,该命令未被识别。说明是docker 中未安装字体。
然后在DockerFile中加入命令:
RUN yum -y install fontconfig
COPY ./fonts /usr/share/fonts
RUN yum -y install ttmkfdir && ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir && fc-cache
但是在生成镜像的时候错误,此错误就不在这里说明了。说明还是行不通。
3、把需要用到的字体拷贝到jvm的字体库目录:
然后在DockerFile中加入:
COPY msyh.ttc /opt/jdk1.8.0_261/jre/lib/fonts/msyh.ttc
然后启动尝试,中文可以正常显示了。