Символы дампа (глифы) от шрифта TrueType (TTF) в битовые массивы

У меня есть пользовательский шрифт TrueType (TTF), который состоит из набора значков, которые я хотел бы представить, поскольку человек побитово отображает (GIF, PNG, безотносительно) для использования в сети. Вы думали бы, что это - простая задача, но по-видимому нет? Существует огромное, убил TTF-связанного программного обеспечения здесь:

http://cg.scs.carleton.ca/~luc/ttsoftware.html

Но это все варьируется уровни "не совсем, что я хочу", неработающие ссылки и/или трудно к невозможному для компиляции на современном поле Ubuntu - например, dumpglyphs (C++) и ttfgif (C) оба сбоя для компиляции должный затенить недостающие зависимости. Какие-либо идеи?

5
задан lambshaanxy 20 April 2010 в 02:19
поделиться

3 ответа

Попробуйте PIL ImageDraw и Модуль ImageFont

Код будет примерно таким

import Image, ImageFont, ImageDraw

im = Image.new("RGB", (800, 600))

draw = ImageDraw.Draw(im)

# use a truetype font
font = ImageFont.truetype("path/to/font/Arial.ttf", 30)

draw.text((0, 0), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", font=font)

# remove unneccessory whitespaces if needed
im=im.crop(im.getbbox())

# write into file
im.save("img.png")
8
ответ дан 18 December 2019 в 14:43
поделиться

Используйте программное обеспечение для обработки изображений, например GIMP, чтобы отобразить все интересующие вас символы, затем сохраните каждый один в файл. Не быстро и не эффективно, но вы знаете, что получите.

-1
ответ дан 18 December 2019 в 14:43
поделиться

Вот рабочая реализация ответа С.Марка, которая выгружает символы от «a» до «z» черным цветом в файлы PNG правильного размера:

import Image, ImageFont, ImageDraw

# use a truetype font
font = ImageFont.truetype("font.ttf", 16)
im = Image.new("RGBA", (16, 16))
draw = ImageDraw.Draw(im)

for code in range(ord('a'), ord('z') + 1):
  w, h = draw.textsize(chr(code), font=font)
  im = Image.new("RGBA", (w, h))
  draw = ImageDraw.Draw(im)
  draw.text((-2, 0), chr(code), font=font, fill="#000000")
  im.save(chr(code) + ".png")
4
ответ дан 18 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: