在PIL中导入base64编码字体

时间:2016-12-17 17:13:44

标签: python fonts base64 python-imaging-library pillow

我正在尝试从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:不是PILfont文件

我希望将我的项目中的所有字体/图像包含在resource.py文件中作为base64编码的字符串资源。我已经用所有图标和图像完成了它,但我无法找到一种方法来使用字体有没有办法做到这一点?

PS:我使用的是python 3.4.4 / windows 10和Pillow 3.4.2,我使用notepad ++来编码ttf文件。

1 个答案:

答案 0 :(得分:1)

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

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

import base64
from PIL import ImageFont
from io import BytesIO

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

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