业务需求
公司推广产品,需要在前端点击按钮,生成一张图片。中文文案,以及微信接口生成的场景二维码,合成在同一张图片上,供用户分享图片。其他用户点击这张图片能够识别二维码,跳转到我们的微信公众号,关注并在我们平台上注册账号,此时分享者可以相应得到积分,积分可以抵扣平台购买产品的金钱额度。
产生的问题
在本地测试通过接口返回图片的字节流,能够在浏览器上正常显示。但发布到测试服务器,发现图片上的中文文案没有显示出来。说明后端并没有正常的绘制中文字符。
Linux测试服务器环境
|
|
解决方案
猜测Linux服务器天然优先支持英文字体,中文字体并没有支持。所以通过java后端打印出服务器能够支持的中文字体
发现并没有支持中文的字体
后端判断服务器能够支持字体java代码
既然服务器没有上没有可以支持中文的字体,那就安装下可以支持中文的字体。
首先输入以下命令
安装成功后,切换到/usr/share,可以看到fonts和fontconfig目录,说明安装成功
接下来可以添加中文字体了
在CentOS中,字体库的存放位置正是上图中看到的fonts目录,所以我们首先要做的就是找到中文字体文件放到该目录下,而中文字体文件在我们的windows系统中就可以找到,打开c盘下的Windows/Fonts目录:
我们只需要在如上选择一两个需要的字体拷贝出来传到服务器的fonts目录下。
我选择了新宋体如下;
在这之前我们还需要新建目录,首先在/usr/share/fonts目录下新建一个目录chinese
然后将上面的字体上传至/usr/share/fonts/chinese目录下即可,使用rz命令:
紧接着需要修改chinese目录的权限:
接下来需要安装ttmkfdir来搜索目录中所有的字体信息,并汇总生成fonts.scale文件,输入命令:
|
|
然后执行ttmkfdir命令:
|
|
最后修改字体配置文件:
|
|
在Font directory list下添加<dir>/usr/share/fonts/chinese</dir>
|
|
然后退出保存:wq
,并执行fc-cache
刷新内存中的字体缓存,这样就不用reboot
重启服务器。
测试发现执行fc-cache
并没有得到预期的结果,最后还是reboot
了服务器。不知道其他的服务器会不会跟我一样,视情况而定