- 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()
...
Follow us!
вся графика сильно интегрирована для повышения производительность. функций которые не предусмотрены, часто либо не возможно реализовать эффективно либо вообще невозможно потому что есть грабли.
рендеринг 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 библиотеки без интерфейса к глифам.