【发布时间】:2013-09-27 08:48:13
【问题描述】:
我想在图像中添加俄语文本。我在 Windows 机器上使用 PIL 1.1.7 和 Python 2.7。由于 PIL 编译了without libfreetype library,我在开发服务器上使用了以下内容:
font_text = ImageFont.load('helvR24.pil')
draw.text((0, 0), 'Текст на русском', font=font_text)
(helvR24.pil取自http://effbot.org/media/downloads/pilfonts.zip)
在生产环境中,我执行以下操作:
font_text = ImageFont.truetype('HelveticaRegular.ttf', 24, encoding="utf-8")
draw.text((0, 0), 'Текст на русском', font=font_text)
(尝试使用unic,cp-1251而不是utf-8)
在这两种情况下,它都不会显示俄语字符(而是显示“正方形”或虚拟字符)。我认为它在开发环境中不起作用,因为很可能helvR24.pil 不包含俄语字符(不知道如何检查它)。但是HelveticaRegular.ttf 肯定有。我还检查了我的.py 文件有 геа-8 编码。即使使用默认字体,它也不显示俄语字符:
draw.text((0, 0), 'Текст на русском', font=ImageFont.load_default())
我还应该尝试/验证什么?我看过https://stackoverflow.com/a/18729512/604388 - 它没有帮助。
【问题讨论】:
-
尝试将文本作为 unicode 字符串传递:
draw.text((0, 0), u'Текст на русском', font=ImageFont.load_default()) -
@mata,我肯定已经尝试过了(以及
unicode('Текст на русском', 'utf-8'))。它返回UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)引用PIL\ImageDraw.py", line 267, text mask = font.getmask(text, self.fontmode)。
标签: python google-app-engine unicode python-imaging-library