Exemplo n.º 1
0
def glyphs_modified(font_before, font_after):
    """For glyphs which are shared between the two fonts, return glyphs
    who's surface areas differ and the diff is greater than a
    predetermined threshold"""
    bad_glyphs = []
    glyphs_before = font_before.getGlyphSet()
    glyphs_after = font_after.getGlyphSet()
    glyphs_shared = set(glyphs_before.keys()) & set(glyphs_after.keys())

    upm_before = font_before['head'].unitsPerEm
    upm_after = font_after['head'].unitsPerEm

    pen_before = AreaPen(glyphs_before)
    pen_after = AreaPen(glyphs_after)

    for glyph in glyphs_shared:
        glyphs_before[glyph].draw(pen_before)
        glyphs_after[glyph].draw(pen_after)

        area_before = pen_before.value
        pen_before.value = 0
        area_after = pen_after.value
        pen_after.value = 0

        area_norm_before = (area_before / upm_before) * upm_after
        area_norm_after = (area_after / upm_after) * upm_before

        if area_norm_before != area_norm_after:
            if abs(area_norm_before - area_norm_after) > GLYPH_AREA_THRESHOLD:
                bad_glyphs.append(glyph)

    glyphs_encoded = font_before['cmap'].getcmap(3, 1).cmap
    return [i for i in glyphs_encoded.items() if i[1] in bad_glyphs]
Exemplo n.º 2
0
def glyphs_surface_area(font):
    """Calculate the surface area of a glyph's ink"""
    glyphs = {}
    glyph_set = font.getGlyphSet()
    area_pen = AreaPen(glyph_set)

    for glyph in glyph_set.keys():
        glyph_set[glyph].draw(area_pen)

        area = area_pen.value
        area_pen.value = 0
        glyphs[glyph] = area
    return glyphs