Dump characters (glyphs) from TrueType font (TTF) into bitmaps

夙愿已清 提交于 2020-01-31 05:36:07

问题


I have a custom TrueType font (TTF) that consists of a bunch of icons, which I'd like to render as individual bitmaps (GIF, PNG, whatever) for use on the Web. You'd think this is a simple task, but apparently not? There is a huge slew of TTF-related software here:

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

But it's all varying levels of "not quite what I want", broken links and/or hard to impossible to compile on a modern Ubuntu box -- eg. dumpglyphs (C++) and ttfgif (C) both fail to compile due to obscure missing dependencies. Any ideas?


回答1:


Try PIL's ImageDraw and ImageFont module

Code would be something like this

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")



回答2:


Here's a working implementation of S.Mark's answer that dumps out chars 'a' to 'z' in black into correctly-sized PNGs:

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")



回答3:


A more concise, and more reliable version of the other answers (which cut off parts of some glyphs for me):

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")

I’d be interested to know whether there’s a better way to construct a PIL Image from the ImagingCore object that font.getmask() returns.




回答4:


Use some imaging software like the Gimp to display all the characters you're interested in, then save each one to a file. Not fast or efficient, but you know what you'll be getting.



来源:https://stackoverflow.com/questions/2672144/dump-characters-glyphs-from-truetype-font-ttf-into-bitmaps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!