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

    然后启动尝试,中文可以正常显示了。

    


        

 

 

    

 

posted @ 2021-06-01 13:54  静喧  阅读(1112)  评论(0编辑  收藏  举报