当前位置: 首页 > news >正文

Java使用Graphics2D绘图在图片插入中文字符放到Linux上面运行时图片中的中文会变成方框或乱码的问题

前面遇到的这个问题后,再网上找了很多解决办法,花了两天时间试过了许多方法才搞定了(因为我使用的docker部署的代码,安装字体后也一直没有意识到docker的这个问题,如果一早就意识到这个问题根本不需要花这么多时间,所以记录一下问题,方便以后处理同样的问题)

可能纯在的问题

1、中文变成‘?’或其他字符的乱码,这是编码的问题,将编码改为utf-8即可

2、中文变成下图中的方框,这是字体的问题,即你在Graphics2D中使用的字体在你部署的Linux环境中是没有的;还有一种情况是,你Linux环境中是有你使用的字体,但你使用的docker等容器部署的Java代码(你可以理解docker容器是Linux中的虚拟机),此时docker容器中也是无法直接使用这个字体的,你需要做一个文件映射

img_v3_02qv_26411fd3-5363-4e5a-9245-c600394dc77g

image

 

 解决方式:

第一步、先在Linux中安装中文字体(如果有了则跳过)

1、先使用yum install fontconfig命令安装fontconfig插件

yum install fontconfig

2、安装更新字体命令

yum install mkfontscale

3、使用fc-list :lang=zh命令查看已安装的中文字体

fc-list :lang=zh

//如果有中文字体是会打印出已有的中文字体的,如下

[root@localhost ~]# fc-list :lang=zh
/usr/share/fonts/chinese/fallback/msjh.ttc: Microsoft JhengHei UI:style=Regular
/usr/share/fonts/chinese/fallback/simsun.ttc: 宋体,SimSun:style=常规,Regular
/usr/share/fonts/chinese/STXINGKA.TTF: STXingkai:style=Regular
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-簡,.PingFang SC:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-繁,.PingFang TC:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-港,.PingFang HK:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-簡,.PingFang SC:style=極細體,Ultralight
/usr/share/fonts/chinese/msyh.ttc: Microsoft YaHei:style=Normal
/usr/share/fonts/chinese/fallback/msyh.ttc: Microsoft YaHei UI:style=Normal

4、没有你需要的中文字体,就需要安装

//先创建中文字体库的目录,Linux的默认字体库目录是/usr/share/fonts里面有Linux自带的字体
mkdir /usr/share/fonts/chinese 
cd /usr/share/fonts/chinese

//设置这个目录的访问权限
chmod -R 755 /usr/share/fonts/chinese

5、使用ftp上传需要(ttf或ttc格式)的字体库到我们新创建的中文字体库中

image

 如果没有字体库,可以去网上下载,或者在Windows本地C:\Windows\Fonts中找到你要的字体复制到其他路径下文件会变成ttf格式

字体库下载链接:https://pan.baidu.com/s/1gOFGcr9wL8VSLwSy67IotQ
提取码:758y

image

 然后再将这些字体上传到Linux中

image

6、关联使用上传的字体库

cd /usr/share/fonts/chinese
mkfontscale
mkfontdir
fc-cache

7、再次查看是否安装成功,如果有了你需要的中文字体就可以再试试重新绘制图片了

[root@localhost ~]# fc-list :lang=zh
/usr/share/fonts/chinese/fallback/msjh.ttc: Microsoft JhengHei UI:style=Regular
/usr/share/fonts/chinese/fallback/simsun.ttc: 宋体,SimSun:style=常规,Regular
/usr/share/fonts/chinese/STXINGKA.TTF: STXingkai:style=Regular
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-簡,.PingFang SC:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-繁,.PingFang TC:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-港,.PingFang HK:style=中粗體,Semibold
/usr/share/fonts/chinese/PF/PingFang.ttc: .蘋方\-簡,.PingFang SC:style=極細體,Ultralight
/usr/share/fonts/chinese/msyh.ttc: Microsoft YaHei:style=Normal
/usr/share/fonts/chinese/fallback/msyh.ttc: Microsoft YaHei UI:style=Normal

二、如果使用的是docker等容器部署Java代码,这里就还没完,这里还需要做一个文件映射

1、使用docker exec -it <container_name> /bin/bash命令进入你的docker环境(其中,<container_name>是要进入的docker容器的名称或者ID。这将在容器中打开一个新的bash终端。)

docker exec -it <container_name> /bin/bash

//也可以使用docker attach命令来进入正在运行的docker容器。运行如下命令:
docker attach <container_name>

2、进入后用下面命令重新检查docker中是否有你需要的中文字体(容器中已安装fontconfig插件的就没必要再安装了)

yum install fontconfig
fc-list :lang=zh

3、如果没有中文字体库,需要将外面Linux的字体库挂在到docker中

//先使用exit命令退出容器再做下面的操作
exit

//要将宿主机的/usr/share/fonts/chinese目录挂载到容器的/usr/share/fonts/chinese目录:
docker run -v /usr/share/fonts/chinese:/usr/share/fonts/chinese ubuntu:latest bash

//如果容器已经在运行,可以使用 docker cp 命令将文件复制到容器内部12。命令格式为:docker cp <源路径> <容器名称>:<目标路径>
docker cp /home/user/file.txt my_container:/usr/src/app/

//然后再进入容器检查字体是否可以使用
docker attach <container_name>
fc-list :lang=zh

4、如果使用Jenkins部署的项目可以再其中添加Execute shell script on remote host using ssh命令,如下

image

image

 添加完后保存,重新构建项目即可,下面是解决后效果图

image

 

http://www.hskmm.com/?act=detail&tid=36485

相关文章:

  • 2025年最新喷码机厂家推荐榜:激光/UV/手持喷码机十大品牌全解析
  • Golang的 cron 库
  • 实用指南:Linux 如何创建和计数套接字
  • 中小企业如何低成本部署电话呼叫软件网页版?一步步教你做
  • 别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
  • 记一次 .NET 某药品缺陷高速检测系统 卡慢分析
  • 0254-CLAP-参数默认值
  • 得物火山引擎:Data Agent驱动财务管理智能升级
  • WPF/C#:使用Stylet中的IWindowManager用于显示等待窗体、对话框与消息框
  • Flask笔记
  • 0253-CLAP-统计参数出现次数
  • 《Vuejs设计与实现》第 18 章(同构渲染)(上) - 详解
  • 配置git
  • 01-C程序设计语言-第2版-第1章导言笔记
  • 0252-CLAP-标记类型的参数
  • 记录我适配iOS26遇到的一些问题
  • 什么情况下有必要使用抽象基类ABC?
  • 0251-CLAP-使用 Cargo 配置
  • vscode安装element报错
  • 2025 年最新推荐!论文发表机构口碑重磅发布,覆盖 SCI / 核心等多领域助你高效发表毕业/SSCI/SCI期刊/核心期刊论文发表机构推荐
  • 2025 年期刊发表机构最新推荐口碑排行榜:覆盖 SCI/SSCI/ 核心期刊,助力科研人员高效选靠谱平台核心期刊发表/国际期刊发表机构推荐
  • 因果机器学习模型实战测试与比较
  • 笔记本电脑如何连接打印机?安装指南分享给你!
  • 2025 年麦克风厂家最新推荐榜单:覆盖娱乐 / 演出 / 直播 / 会议多场景,精选技术领先口碑优良品牌助力采购
  • 【2025-10-21】维护关系
  • 【Github热门项目】DeepSeek-OCR项目上线即突破7k+星!突破10倍无损压缩,重新定义文本-视觉信息处理
  • MATLAB 的无人机 PID 控制及智能 PID 控制器设计的仿真
  • 2025年口碑好的直角支架铝型材深加工,工业铝型材深加工工厂-江苏龙新铝业
  • 2025 年最新工矿灯生产厂家口碑推荐榜:精选 LED/防爆/高光效等多类型产品,助力企业选出实力与品质兼具的照明品牌
  • 2025年10月胰腺癌治疗医生对比榜:五名专家深度解析