Дамп символов (глифов) из шрифта TrueType (TTF) в растровые изображения - PullRequest
4 голосов
/ 20 апреля 2010

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

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

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

Ответы [ 4 ]

7 голосов
/ 20 апреля 2010

Попробуйте PIL ImageDraw и ImageFont module

Код будет выглядеть примерно так

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")
3 голосов
/ 20 апреля 2010

Вот рабочая реализация ответа С.Марка, который выгружает символы '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")
2 голосов
/ 11 июля 2014

Более краткая и более надежная версия других ответов (которые для меня отрезали части некоторых символов):

import string

from PIL import Image, ImageFont


point_size = 16
font = ImageFont.truetype("font.ttf", point_size)

for char in string.lowercase:
    im = Image.Image()._new(font.getmask(char))
    im.save(char + ".bmp")

Мне было бы интересно узнать, есть ли лучший способ построить изображение PIL из объекта ImagingCore, который возвращает font.getmask().

0 голосов
/ 20 апреля 2010

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

...