You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将TTF字体中可打印ASCII字符的字形转为SVG路径

从TTF字体提取可打印ASCII字符的路径坐标

不用绕路转整个SVG文件,直接用Python的字体处理库就能高效提取每个字符的路径坐标,或者按需生成单个字形的SVG路径。下面是具体实现方案:

直接提取路径(推荐)

用fonttools库直接解析TTF字体的字形轮廓,生成SVG路径字符串,再按需转换成坐标列表:

  1. 安装依赖
pip install fonttools svgpathtools
  1. 示例代码
from fontTools.ttLib import TTFont
from fontTools.pens.svgPathPen import SVGPathPen
from svgpathtools import parse_path, CubicBezier, QuadraticBezier

# 加载目标TTF字体
font = TTFont("your_font_file.ttf")
glyph_set = font.getGlyphSet()
# 覆盖所有可打印ASCII字符(ASCII 32-126)
printable_chars = [chr(code) for code in range(32, 127)]

char_path_coords = {}

for char in printable_chars:
    # 获取字符对应的字形名称
    try:
        glyph_name = font.getBestCmap()[ord(char)]
    except KeyError:
        # 字体不包含该字符时跳过
        char_path_coords[char] = None
        continue
    
    glyph = glyph_set[glyph_name]
    # 生成SVG路径指令
    pen = SVGPathPen(glyph_set)
    glyph.draw(pen)
    svg_path_str = pen.getCommands()
    
    # 解析SVG路径为坐标点列表(包含起点、终点、贝塞尔控制点)
    path = parse_path(svg_path_str)
    coords = []
    for segment in path:
        # 添加起点和终点
        coords.append((round(segment.start.real, 2), round(segment.start.imag, 2)))
        coords.append((round(segment.end.real, 2), round(segment.end.imag, 2)))
        # 添加贝塞尔曲线的控制点
        if isinstance(segment, (CubicBezier, QuadraticBezier)):
            for ctrl in segment.control_points:
                coords.append((round(ctrl.real, 2), round(ctrl.imag, 2)))
    
    char_path_coords[char] = coords

# 示例:输出字符'A'的路径坐标
print("字符'A'的路径坐标:", char_path_coords['A'])

font.close()

生成单个字形的SVG文件

如果需要单独导出每个字符的SVG文件,可结合svgwrite实现:

  1. 安装额外依赖
pip install svgwrite
  1. 导出SVG的代码片段
import svgwrite

# 以字符'B'为例
char = 'B'
svg_path = pen.getCommands()  # 复用上面生成的svg_path_str
dwg = svgwrite.Drawing(f"glyph_{char}.svg", size=("100px", "100px"), profile='tiny')
dwg.add(dwg.path(d=svg_path, fill='none', stroke='black', stroke_width=1))
dwg.save()

关键说明

  • fonttools是专业的字体处理库,能直接读取TTF的字形轮廓数据,比转整个SVG文件更高效
  • 若字体缺少某些可打印ASCII字符,代码会自动跳过并标记为None
  • 坐标值默认保留两位小数,可根据需求调整精度

内容的提问来源于stack exchange,提问作者Vixey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:30:09