問題:
因業務需要,需要在圖片上生成中文水印然后輸出圖片。一開在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
然后啟動嘗試,中文可以正常顯示了。