我如何在 replit 中加载带有 PIL.ImageFont.truetype 的字体文件

How I can load a font file with PIL.ImageFont.truetype in replit

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

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

我得到了一些例子,只要我在我的电脑上 运行 它就很好用,但是当我到达 replit.com 时它给出了错误说

Command raised an exception: OSError: cannot open resource

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

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

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

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

涵盖第一个选项

我们来看第二个。假设您的字体在您的 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)