Рисование с Webdings в PIL

У меня есть программа Python, использующая PIL для рендеринга текста, и она отлично работает со всеми типами шрифтов. Но он рисует только прямоугольники «недостающих глифов» с крыльями или перепонками.

Вот пример, который пытается нарисовать каждый символ Юникода:

# Run this with .ttf file path as an argument, and also an encoding if you like.
# It will make 16 PNGs with all the characters drawn.
import sys
import Image, ImageDraw, ImageFont

size = 20
per = 64

chars = 0x10000
perpage = per*per

fontfile = sys.argv[1]
encoding = sys.argv[2] if len(sys.argv) > 2 else ''

font = ImageFont.truetype(sys.argv[1], size, encoding=encoding)

for page in range(0, chars//perpage):

    im = Image.new("RGB", (size*per+30, size*per+30), '#ffffc0')
    draw = ImageDraw.Draw(im)

    for line in range(0, per):
        for col in range(0, per):
            c = page*perpage + line*per + col
            draw.text((col*size, line*size), unichr(c), font=font, fill='black')

    im.save('allchars_%03d.png' % page)

С Arial.ttf (или даже лучше, ArialUni.ttf) я получаю 16 интересных PNG. При поиске проблем с PIL необходимо указать кодировку некоторых символьных шрифтов. Если я использую Symbol.ttf, я получаю все отсутствующие глифы до тех пор, пока не укажу "Symb" в качестве кодировки.

Как заставить работать крылья?


person Ned Batchelder    schedule 07.01.2009    source источник


Ответы (2)


Должно быть, я раньше делал что-то не так. "Symb" как кодировка работает и для wingdings! Извините за шум ...

person Ned Batchelder    schedule 07.01.2009

Не все крылья сопоставляются с юникодом: см. http://www.alanwood.net/demos/wingdings.html

Кроме того, вы охватываете только базовую многоязычную плоскость. (википедия)

person Douglas Leeder    schedule 07.01.2009
comment
Это один из тех случаев, когда мы используем шрифт просто как набор глифов без семантического содержания. Итак, «c» - это большая пустая коробка и т. Д. - person Ned Batchelder; 08.01.2009