在 PIL 中导入 base64 编码的字体

importing base64 encoded fonts in PIL

我正在尝试从 base64 编码的字符串加载 Pil 中的真实字体, 使用此代码:

import base64
from PIL import ImageFont
from io import BytesIO

TTF = "T1RUTwAJAIAAAwAQQ0ZGIGkSYyMAAACcAA"  # ...this is obviously only part of the string representing a base64 encoded ttf file

fontub = ImageFont.ImageFont()
fontub._load_pilfont_data(BytesIO(base64.b64decode(TTF)),None)

但我收到此错误:

SyntaxError: Not a PILfont file

我想将我项目中的所有 font/images 作为 base64 编码字符串资源包含在 resource.py 文件中。我已经用所有的图标和图像做到了,但是我找不到用字体的方法有什么办法吗?

PS:我正在使用 python 3.4.4/windows 10 和 Pillow 3.4.2,我正在使用 notepad++ 对 ttf 文件进行编码。

如我的评论所述,_load_pilfont_data 函数加载 PILFont 数据(而不是 TTF 字体文件的数据),因此如果您尝试使用该函数加载 TTF 字体 - 您将获得SyntaxError(因为它不是 PILfont 文件)。

您可以做的 - 是使用 ImageFont 模块的 truetype 功能:

import base64
from PIL import ImageFont
from io import BytesIO

TTF = "T1RUTwAJAIAAAwAQQ0ZGIGkSYyMAAACcAA" 
fontub = ImageFont.truetype(BytesIO(base64.b64decode(TTF)))

documentation 中说您应该提供文件的路径,但似乎 BytesIO 也可以。