from fontTools.ttLib import TTFont import os import shutil from fontTools.pens.svgPathPen import SVGPathPen from svglib.svglib import svg2rlg from reportlab.graphics import renderPM import io def woff_to_pngdir(woff_file): base_file_name = os.path.splitext(woff_file)[0] if os.path.exists(base_file_name): # 删除非空目录 shutil.rmtree(base_file_name, ignore_errors=True) try: os.mkdir(base_file_name) except Exception as e: print(e) # 读取woff文件 font = TTFont(woff_file) charsdict = font.getBestCmap() for key, value in charsdict.items(): # 产生svg pen = SVGPathPen(font.getGlyphSet()) font.getGlyphSet()[value].draw(pen) xMin, xMax, yMin, yMax = ( font["head"].xMin, font["head"].xMax, font["head"].yMin, font["head"].yMax, ) height = yMax - yMin width = xMax - xMin # r=width/100 svg_xml = f'' # 内存png drawing = svg2rlg(io.StringIO(svg_xml)) # 保存识别结果 renderPM.drawToFile(drawing, rf"{key}-{value}.png") if __name__ == "__main__": woff_to_pngdir("abc.woff")