Neatbo.

字形边界与字体排版指标的差别

通过尾部、空轮廓与复合变换的例子,解释怎样保留完整独立 SVG 资产,而不把声明指标当作实际排版结果。

被切掉的尾部说明了什么

原作者描述字体内可见的尾部在导出 SVG 时被切掉,并询问能否保持字体不变而导出完整边界。它指出了资产边界需求,却不能证明问题一定来自 ascent/descent、hmtx 或某版 FontForge;原完整字体未提供。

对示例 ID2,真实曲线从 y=-900 延伸到约402.083333,而存储控制点上界为1600,全字体 ascent为700、descent为-200。曲线极值、控制点范围与全局行指标回答不同问题,不能相互替换。

三种边界与一种声明指标

SVG 保留原 glyf 设计网格,而不是把轮廓 xMin 自动搬到 hmtx 的左侧边距。报告同时保留声明指标,便于使用者决定资产与排版怎样衔接。缩放、反射、shear、多层复合和二次曲线的中间点都需要完整参与边界计算。

如何解释报告
字段实际含义不代表
storedControlBoundsglyf 存储的控制点 bbox真实二次曲线极值
bbox完整展开曲线极值;空轮廓 null字体行高或排版范围
viewBoxY 反转、留边与向外数值保护无损数值运算或像素渲染
advanceWidth / leftSideBearing原 hmtx 声明值hinting/USE_MY_METRICS 的有效布局

空轮廓和未覆盖是不同状态

空格或 .notdef 可能合法但没有轮廓:emptyOutline=true、bbox=null、commands=[],SVG 无 path,canvas 为 max(1,advance)×1。没有覆盖的码位则显式 covered=false,不自动选择 .notdef 或合成一个 SVG。

Unicode 优先表与有限 Apple 表决定码位请求。Mac Arabic/Hebrew 的方向或字体变体不能简单剥离,也不能用 ISO 替代;缺乏上下文就明确不支持,可转用确认后的字形 ID。

把完整产物交给下一步

摆放轮廓资产时使用完整导出的曲线;后续排版需要字体声明指标时,再单独读取这些指标。有界界面预览便于检查请求,下载 ZIP 才包含全部所选字形与码位状态。

  • 先用支持的静态单 face TTF,按十进制 ID 或 U+ 码位选择;不支持格式不会自动转换。
  • 下载 ZIP 中每个 SVG 和 report.json;表格只有前200行,长单元格前2000 UTF-16单位,20,000字符以上复制为明确摘要。
  • 最多16MiB输入、2000选择、2000字形、200k命令/展开点/访问、深度32,逻辑32MiB与实际ZIP33,766,552B共同约束;组合预算并非互相保证。
  • 不执行指令、不安装/改写字体、不做塑形、kerning、栅格化或字体完整性认证。错误或取消无部分 ZIP;修正后用同一原件恢复。

参考资料

本分类工具使用说明

展开工具,查看操作步骤、可调选项和支持范围,再直接进入工作区。

静态字体字形 SVG 导出从支持的静态 TrueType 字体选取字形或码位,导出完整曲线边界的 SVG 和含名称、声明指标与码位状态的 JSON ZIP。

完整曲线资产需要曲线边界,而不只是字体行高。先确认支持格式和选取方式,再查看未覆盖状态并下载完整 ZIP。

操作步骤

  1. 选择一份支持的静态 TTF;字体原件保持不变。
  2. 输入字形 ID 或 Unicode 码位,设置整数留边。两个列表的并集决定输出字形。
  3. 核对选中字形、未覆盖码位和指标范围;下载 ZIP 查看每个 SVG 与完整 JSON。

可调选项

字形 ID 列表
按需要填写

十进制 ID,以空白或逗号分隔;如 2,3。可留空并使用码位。

Unicode 码位列表
U+0041

如 U+0041 U+1F600 或 65;映射缺失会显示为未覆盖。

SVG 留边(字体单位)
0

0–4,096 的整数;留边作用于曲线边界,不修改原字体或声明指标。

能力与限制

  • 仅单 face 的 sfnt 0x00010000 静态 TTF:glyf 二次曲线及有限无环 XY 仿射复合字形;原件最多 16MiB。CFF/CFF2、TTC、WOFF/WOFF2、可变、彩色、位图或内嵌 SVG 字体、点对齐复合字形与 cmap 2/8/10/14 不支持。
  • ID 为十进制非负整数;码位为十进制或 U+ 加 1–6 位十六进制字符,以空白或逗号分隔。两个列表合计最多 2,000 项,分别不允许重复;不支持范围缩写。码位须为 Unicode scalar;映射不到非零字形时显式记录未覆盖,不生成替代字形。留白只省略该列表;至少指定一项。
  • 最多选中 2,000 个字形、200,000 条 M/L/Q/Z 命令、200,000 个展开控制点、200,000 次组件访问、32 层复合深度。SVG 留边为 0–4,096 个字体单位。完整 SVG+JSON 合计最多 32MiB;2000 SVG+report.json 共 2001 个成员,STORE ZIP 最多 33,766,552 字节。组合输入可能先触及另一项预算。
  • 坐标保留原 glyf 设计网格,SVG 反转 Y 轴;曲线边界由 float64 推导并显式向外加数值保护,不是无损数值运算。advance/lsb 为原 hmtx 声明值;不应用 USE_MY_METRICS、hinting、排版塑形、kerning 或栅格化布局。不会执行字体指令,也不校验全字体 checksum 或安装完整性。
  • cmap 支持 0/4/6/12/13;先选有限 Unicode 优先表,Mac 字符映射只支持已声明的 Apple 表和语言/编码组合,不以 ISO 或未知语言回退猜测。Arabic/Hebrew 的方向、重复、多标量或字体变体歧义会原子提示不支持;可改用有效字形 ID。post 1/2/2.5/3 支持名称;post 4/未知格式、非 ASCII 自定义名称、保留索引及非法 XML 控制字符不支持。名称中的 TAB/LF/CR 保留,CR 在 SVG 中写为 
。
  • 表格预览前 200 个字形,并将长单元格限定为前 2,000 个 UTF-16 单位。JSON 超过 20,000 字符时复制的是明确摘要;ZIP 中 report.json、每个 SVG、全部命令、声明指标与码位状态始终完整。空轮廓保留 emptyOutline、bbox=null 和无 path SVG,不伪造曲线。
打开静态字体字形 SVG 导出 →
静态字体字形 SVG 导出