FontTools 字体合并操作手册3 种场景的命令行合并与边界【免费下载链接】fonttoolsA library to manipulate font files from Python.项目地址: https://gitcode.com/gh_mirrors/fo/fonttools本文讲解 FontTools 的 merge 模块做字体合并fonttools merge命令行操作、Merger API 调用与边界条件。你拿到的是 3 个最小可运行操作、以及坑点的具体报错与处理方式。场景速览使用场景前置条件输出/效果双语字体拉丁阿拉伯合并两字体 unitsPerEm 相同单份 OTFcmap 合并重复字形去重多语言字形冲突消歧同一 Unicode 映射到不同字形字体含 GSUB冲突字形改名parenleft.1注入locl替换批量合并字体列表一行一个路径的文本文件--input-file批量输出支持 # 注释变量字体实例整合designspace 描述轴与实例varLib builder 出变量字体可导出实例机制速览Lib/fontTools/merge/init.py 中的 Merger 类用 TTFont 加载各字体后先由computeMegaGlyphOrder计算覆盖全部字体的超级字形顺序再建统一 cmap 并记录“同码位不同字形”冲突随后按表标签逐个调用对应表类的merge()聚合字段hhea.ascent取 max、head.unitsPerEm要求严格相等最后向 GSUB 注入locl查找表消解冲突输出一个可save()的 TTFont。分场景实战命令行合并操作合并同 em 值的两字体merge 子命令注册在 fonttools 入口输出默认名 merged.ttf可用--output-file覆盖。前置条件✅ 两个 ttf/otf 文件unitsPerEm 一致可用ttx -t head核对。fonttools merge latin.ttf arabic.ttf --output-filemerged.ttf --verbose预期结果日志打印Merging cmap.等行生成 merged.ttf包含两字体全部字形与合并后的 cmap。另外注意输出 sfntVersion 取第一个输入文件TTF 与 OTF 混合并会导致表结构不一致保持两字体同为 TTF 或 OTF。批量合并字体文件列表字体超过 3 个时路径写进列表文件更稳一行一个路径#开头的行按注释忽略。前置条件准备 list.txt每行一个待合并字体路径。# list.txt: 每行一个字体路径 fonttools merge --input-filelist.txt --output-filemerged.ttf --drop-tablesDSIG预期结果生成 merged.ttf--drop-tables按标签跳过表格大小写敏感合并日志中每个表标记Merged或Dropped。Python API 合并与元数据注入程序化场景直接用 Mergermerge()返回 TTFont 对象可改表后保存命令行等价路径是--import-filemeta.ttxPython 里则调用importXML()。前置条件Python 环境已安装 fonttools。from fontTools.merge import Merger font Merger().merge([latin.ttf, arabic.ttf]) font.save(merged.otf)预期结果save生成单份输出若提供 TTXname 表等元数据按 TTX 覆盖。坑与边界⚠️ 以下 4 条是实际会打出来的报错/告警AssertionError: Expected all items to be equal: [1024, 2048]→head.unitsPerEm的合并逻辑是equalupem 不一致直接断言失败 → 先用 Lib/fontTools/ttLib/scaleUpem.py 把字体缩放到同一 upem 再合并。Warning Have non-identical duplicates to resolve ... but no GSUB→ 该字体存在待消解的重复字形但没有 GSUB 表冲突无法自动处理 → 合并前确认字体带 GSUB 表否则冲突码位只映射到第一个字体的字形。Warning Dropped mapping from codepoint 0x0028 to glyphId→ 同一字体内同码位映射了两个不同字形且已被其他字符重定向 → 检查源字体 cmap移除重复映射。Warning Dropped cmap subtable from font ... format 14→ 非标准 cmap 子表format 4/12/14 之外被丢弃 → 属预期行为除非依赖该子表否则无需处理。选型参考命令行 merge 覆盖“同 upem、cmap 取并集、GSUB/GPOS 合并”的常规需求只合并 cmap 一张表时直接用 ttLib 操作TTFont[cmap]更快。需要改轮廓或从零造字体时换 Lib/fontTools/fontBuilder.py 的 FontBuilder 方案或用 ufoLib designspace 建变量字体。变量字体的 designspace 合并与拆分降级见 Lib/fontTools/designspaceLib/split.py。FontTools merge 子命令覆盖约 80% 的常规合并需求涉及变量字体轴合并或轮廓重建时应交给 varLib 与 ufoLib 处理。【免费下载链接】fonttoolsA library to manipulate font files from Python.项目地址: https://gitcode.com/gh_mirrors/fo/fonttools创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考