- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
font = ImageFont.FreeTypeFont("%s.ttf" %font_family, font_size)
for i in xrange(256):
mask = font.getmask(charset[i])
mask.save_ppm("c:\\tmp\\char.ppm")
img = Image.open("c:\\tmp\\char.ppm")
w, h = img.size
mask_as_str = img.tostring()
...
вся графика сильно интегрирована для повышения производительность. функций которые не предусмотрены, часто либо не возможно реализовать эффективно либо вообще невозможно потому что есть грабли.
рендеринг TrueType шрифтов штука нетривиальная, и в общем случае:
- побуквенный вывод будет работать только с monospace фрифтами, потому что все остальные шрифты будут выглядеть криво без кернинга.
- "маска" слово не подходящее, более правильно "альфа канал" из-зи anti-aliasing. там есть еще фишка с цветами, в которую я доконца не врубаю: AA учитывает цвет бэкграунда и цвет шрифта при вычислении промежуточных цветов.
- и самое главное, вывод буков ручками побуквенно будет тормозить, по сравнению с нормальных рендерингом.
а если ты просто извращаешься, то сохранение во временный файл как бы и нет такая большая проблема. только возьми какую либу для работы с времеными файлами. гугление `mktemp python` чего-то находит.
Если только пиксели, то ImageFont.getmask() возвращает объект Image, у которого вроде был метод tostring().
Если полный файл, то AFAIK рекомендуется использовать StringIO чтобы загнать временный файл в память. Других вариантов нету.
Просто в том же Qt QPixmap и QImage без проблем конвертируются друг в друга. Неужели тут нет никакого способа?
для таких случаев, все шрифтовые библиотеки, тем более низкоуровневые, предоставляют доступ к векторному представлению шрифта. (glyph outline, glyph path)
на виндах в далеком прошлом делал с помощью (если не ошибаюсь) GetGlyphOutline() вывод текста в opengl.
"Дабы не тащить за собой лишних либ, типа ttflib, темболее что требуются всего один шрифт трех размеров."
написать спец прогу и сгенерить растровые картинки. и картинки и прогу зачекинить, что бы если шрифт будет меняться, можно было потом картинки перегенерить.
Дык вон она, в топике. ОП же так и сделал ;)
я представить себе не могу OSи на которой нету штатной TTF библиотеки без интерфейса к глифам.