PIL问题:无法加载字体库和使用unicode
我刚安装了PIL(Python Imaging Library)。但是我发现:
- 我无法使用“ImageFont.truetype("xxx.ttc", 50)”这样的方式加载任何字体库。
- 当我把一些文本渲染到图片上时,如果文本是包含中文字符的unicode格式,我会遇到一个错误,叫做UnicodeEncodeError,错误信息是:
UnicodeEncodeError: 'ascii' codec 无法在位置0编码字符u'\u6211':序号不在范围内(128)
出问题的脚本是:
# -*- coding: utf-8 -*-
import sys
from PIL import Image
import ImageFont, ImageDraw
text = sys.argv[1]
if not isinstance(text, unicode):
text = text.decode('gbk')
filename = sys.argv[2]
image = Image.new("RGBA", (100, 100), (255,255,255))
usr_font = ImageFont.truetype("simsun.ttc", 50) #In fact, it can't load any font lib.
d_usr = ImageDraw.Draw(image)
d_usr = d_usr.text((10, 10), text, fill = "blue", font=usr_font) #error when text is Chinese
image.save(filename)
我的操作系统是Windows7,安装的是Python 2.5。有人能帮我吗?提前谢谢!
1 个回答
0
在Ubuntu10.10上,使用python 2.6.6运行得很好。也许可以试试用tcc字体的绝对路径?
以下是运行得非常顺利的代码:
#! /usr/bin/python
# -*- coding: utf-8 -*-
import Image
import ImageDraw
import ImageFont
ttfont = ImageFont.truetype ('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 20)
text = u'我能有乾酪?'
image = Image.new ('RGB', (256, 128), 0xffffff);
ImageDraw.Draw (image).text ( (20, 20), text, font = ttfont, fill = (0, 0, 0) )
image.save ('chinese.jpg')