在replit平台使用PIL.ImageFont.truetype加载字体报错如何解决?
问题原因
Replit运行环境为Linux系统,默认未预装Windows专属的Arial字体,因此本地可正常调用的arial.ttf文件在Replit环境中不存在,触发资源无法打开的OSError。
修复方案
方案1:上传字体文件到Replit项目(推荐,可保证字体效果和本地完全一致)
- 从本地设备导出你需要的
arial.ttf字体文件,直接上传到Replit项目的根目录(和你执行加载字体代码的脚本放在同一层级) - 原有加载字体的代码不需要做任何修改即可正常运行:
font = ImageFont.truetype("arial.ttf", 28)
方案2:调用Replit系统内置字体
如果不想额外上传字体文件,可以直接使用Replit环境预装的开源字体:
- 先执行以下代码列出所有系统可用的字体名称和对应路径:
from matplotlib import font_manager for font in font_manager.fontManager.ttflist: print(f"字体名:{font.name},路径:{font.fname}")
- 找到你想要使用的字体后,把字体路径填入加载代码即可,例如常用的DejaVu Sans字体的代码为:
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 28)
注意事项
- 如果字体文件放在项目的子目录(例如自建的
fonts文件夹),需要填写正确的相对路径,示例:font = ImageFont.truetype("fonts/arial.ttf", 28) - 不要使用Windows系统专属的字体路径格式,Linux环境下路径分隔符为正斜杠
/
内容的提问来源于stack exchange,提问作者Slashmahn
相关产品推荐
相关产品推荐

