这是一个简短的example。
from PIL import ImageFont, ImageDraw
draw = ImageDraw.Draw(image)
# use a bitmap font
font = ImageFont.load("arial.pil")
draw.text((10, 10), "hello", font=font)
# use a truetype font
font = ImageFont.truetype("arial.ttf", 15)
draw.text((10, 25), "world", font=font)
我想知道字体是否缺少渲染文本中的任何字形。
当我尝试渲染一个缺少的字形时,我得到一个空方格。
draw.text((10, 10), chr(1234), font=font)
这两个问题几乎相同。
我更喜欢使用Pillow来确定我想要的东西。 PyPI的其他模块也很受欢迎。
答案 0 :(得分:2)
有{' fontTools'包,包括用于读取和查询TrueType字体的python类。这样的事情是可能的
from fontTools.ttLib import TTFont
f = TTFont('/path/to/font/arial.ttf')
print(f.getGlyphOrder()) # a list of the glyphs in the order
# they appear
print(f.getReversedGlyphMap() # mapping from glyph names to Id
id = f.getGlyphID('Euro') # The internal code for the Euro character,
# Raises attribute error if the character
# isn't present.
从字符到字形的映射通常很复杂,并且在字体的cmap表中定义。它是二进制部分,但可以使用
进行检查f.getTableData('cmap')
字体可以有多个cmap表。 freetype interface也可以读取ttf文件。可以使用freetype来尝试渲染一个角色,并查看结果:这会很慢。
import freetype as ft
face = ft.Face('arial.ttf')
face.set_size(25*32)
face.load_char(‽)
bitmap = face.glyph.bitmap.buffer
if bitmap == [255, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 255, 255]:
print("No interobang in the font")