代码之家  ›  专栏  ›  技术社区  ›  Szabolcs Dombi

ImageFont检测缺少glyph(Python Pillow)[重复]

  •  2
  • Szabolcs Dombi  · 技术社区  · 8 年前

    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)
    
    • 如何以编程方式确定缺少的字形?
    • 如何列出 信托信托基金 文件

    我更喜欢用枕头来决定我想要什么。 PyPI的其他模块也受欢迎。

    1 回复  |  直到 8 年前
        1
  •  4
  •   James K    7 年前

    这就是“ 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.
    

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