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

使用fontTools与PyMuPDF生成字体时曲线质量无法保留

修复字体转换中的曲线质量下降问题

以下是针对AI网格字形转字体工具中曲线质量丢失问题的具体排查和修复方案:

1. 阻止PyMuPDF简化路径提取

PyMuPDF默认会对提取的路径进行简化处理,这是导致曲线变形的核心原因之一。修改drawings_for_tile函数中的路径提取逻辑,添加PDFDRAW_NO_SIMPLIFY标志以保留原始曲线细节:

def drawings_for_tile(page, tile_rect):
    kept = []
    # 添加NO_SIMPLIFY标志禁用路径自动简化
    for d in page.get_drawings(flags=fitz.PDFDRAW_NO_SIMPLIFY):
        r = fitz.Rect(d["rect"])
        if not r.intersects(tile_rect):
            continue

        # 过滤超出tile范围的大尺寸冗余路径
        if r.width > tile_rect.width * 1.2 or r.height > tile_rect.height * 1.2:
            continue

        fill = d.get("fill")
        stroke = d.get("color")
        fo = d.get("fill_opacity", 1.0)
        so = d.get("stroke_opacity", 1.0)

        # 跳过不可见或仅作为裁剪路径的图形
        if (fill is None or fo == 0) and (stroke is None or so == 0):
            continue

        kept.append(d)
    return kept

2. 禁用fontTools的自动优化

fontTools在保存字体时默认会对CFF字符进行优化,可能会合并曲线段或减少控制点,导致质量损失。修改保存字体的代码,关闭优化选项:

# 原保存代码
# font.save(OUTPUT_FONT)
# 修改为:
font.save(OUTPUT_FONT, optimize=False)

3. 确保AI导出PDF的质量设置

从Illustrator导出PDF时必须保证矢量数据完整性:

  • 选择「高质量打印」预设
  • 在「压缩」选项卡中,将「矢量图形」设置为「不压缩」
  • 禁用「将渐变转换为网格」等可能破坏曲线结构的选项
  • 保持导出分辨率与AI文件一致(默认72dpi即可,无需调整)

4. 验证坐标转换精度

检查坐标映射逻辑是否引入误差:

  • 确保TILE_SIZE与AI中实际的网格 tile 尺寸完全匹配(单位为PDF点,1英寸=72点)
  • 避免在路径绘制前对坐标进行不必要的舍入,保持浮点精度直到最终生成字符串

5. 调试路径提取结果

添加临时调试代码,对比原始AI路径和提取后的曲线段数量,确认没有丢失曲线:

def draw_drawing_to_pen(drawing, pen, tile_rect, flip_y=False, scale=1.0):
    # 添加曲线段计数器
    curve_count = 0
    items = drawing["items"]
    H = tile_rect.height

    cur = None
    start_pt = None
    contour_open = False

    # ... 原有代码 ...

    for it in items:
        op = it[0]
        if op in ("c", "v", "y"):
            curve_count +=1
        # ... 原有代码处理逻辑 ...
    
    print(f"当前图形提取到{curve_count}条曲线段")

通过以上步骤,可有效保留原始AI文件中的曲线细节,避免转换过程中的质量损失。

内容的提问来源于stack exchange,提问作者Nurul Alam Ador

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:47:32