如何在 replit 中使用 PIL.ImageFont.truetype 加载字体文件

Posted

技术标签:

【中文标题】如何在 replit 中使用 PIL.ImageFont.truetype 加载字体文件【英文标题】:How I can load a font file with PIL.ImageFont.truetype in replit 【发布时间】:2021-11-08 23:36:23 【问题描述】:

我正在尝试在 discord.py 中制作这张欢迎卡,目前我正在 replit.com 上运行我的机器人。

font = ImageFont.truetype("arial.ttf", 28)

我有一些示例,只要我在我的 PC 上运行它就可以很好地工作,但是当我访问 replit.com 时,它给出了错误提示

Command raised an exception: OSError: cannot open resource

我应该如何纠正这个问题?

【问题讨论】:

【参考方案1】:

我不知道discordreplit,但假设问题是您无法上传二进制字体文件。

如果是这样,您有几个选择:

在某处在线找到您想要的字体并使用requests.get(URL)replit 上的代码中获取它,或者 在您的代码中创建一个 base64 变量并对其进行解码

第一个选项覆盖here。

让我们看看第二个。假设您的字体在您的 PC 上称为 /Fonts/funky.ttf。现在你想要在 base64 中,你可以在本地 PC 上使用命令行工具:

base64 < /Fonts/funky.txt

这将产生一长串字符。复制它,然后在您的 Python 代码中添加一个名为 font64 的字符串并将其设置为等于粘贴的字符串,即

font64 = 'PASTED STRING'

现在在您的代码中,您可以将字符串从 base64 转换回二进制,然后将其包装在 BytesIO 中以使其看起来像一个文件并加载它:

import base64
import io
from PIL import ImageFont

font64 = 'PASTED STRING'

# decode from base64 to binary
binary = base64.b64decode(font64)

# wrap in BytesIO to make file-like object
FileLike = io.BytesIO(binary)

# load font
font = ImageFont.truetype(FileLike, 28)

【讨论】:

感谢战利品!第一个选项很有效

以上是关于如何在 replit 中使用 PIL.ImageFont.truetype 加载字体文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥在replit中删除列表时json会出错

使用 REPLIT 创建我的第一个机器人但总是错误 Discord.JS [重复]

Replit.web:具有内置数据库和身份验证支持的 Python 框架

“Replit 威胁我,要求我关闭我的开源项目!”

巧用replit搭建免费的个人云服务器

“我的开源项目被威胁了!”