Проблемы с PIL: не удалось загрузить любую библиотеку шрифтов и использовать Unicode - PullRequest
0 голосов
/ 11 мая 2011

Я недавно установил PIL.Но я нахожу:

  1. Я не могу загрузить любую библиотеку шрифтов, используя "ImageFont.truetype (" xxx.ttc ", 50)" и т. П.
  2. Когда я рендеринг некоторыхтекст в изображение, и текст в 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 Ответ

0 голосов
/ 11 мая 2011

Отлично работает на 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')
...