我想在图片中添加俄文文字。我在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 - 它没有帮助。
答案 0 :(得分:8)
我有类似的问题并解决了它。
有几件事你需要注意:
这是代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter
#configuration
font_size=36
width=500
height=100
back_ground_color=(255,255,255)
font_size=36
font_color=(0,0,0)
unicode_text = u"\u2605" + u"\u2606" + u"Текст на русском"
im = Image.new ( "RGB", (width,height), back_ground_color )
draw = ImageDraw.Draw ( im )
unicode_font = ImageFont.truetype("DejaVuSans.ttf", font_size)
draw.text ( (10,10), unicode_text, font=unicode_font, fill=font_color )
im.save("text.jpg")
这是结果
答案 1 :(得分:2)
您可以检查一下您的TTF文件吗?我怀疑它不支持您想要绘制的角色。
在我的电脑(Ubuntu 13.04)上,此序列生成正确的图像:
ttf=ImageFont.truetype('/usr/share/fonts/truetype/msttcorefonts/Arial.ttf', 16)
im = Image.new("RGB", (512,512), "white")
ImageDraw.Draw(im).text((00,00), u'Текст на русском', fill='black', font=ttf)
im.show()
N.b。当我没有指定unicode(u'...'
)时,结果为mojibake。