#python #unicode #fonts #python-imaging-library
#python #unicode #шрифты #python-imaging-library
Вопрос:
Я недавно установил PIL. Но я нахожу:
- Я не могу загрузить какую-либо библиотеку шрифтов, используя «ImageFont.truetype («xxx.ttc», 50)» и тому подобное.
- Когда я преобразую некоторый текст в изображение, а текст в формате unicode содержит китайские символы, я получаю ошибку UnicodeEncodeError типа:
Ошибка UnicodeEncodeError: кодек ‘ascii’ не может закодировать символ u ‘ u6211’ в позиции 0: порядковый номер не входит в диапазон (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:
Это отлично работает на 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')
Комментарии:
1. Большое вам спасибо! Я обнаружил две допущенные мной ошибки: 1) Я использовал шрифт, которого не существует на моем компьютере, или имя без правильного пути. 2) Когда строка Unicode, состоящая из китайских символов, должна быть отображена в виде изображения, требуется китайский шрифт! В противном случае PIL жалуется на ошибку UnicodeEncodeError, которая, IMHO, может вводить в заблуждение.