已加载全部内容

img2bez - 从栅格到矢量

链接
分类
文章设计工具开发排版2026-07-01 03:06:00
简介

img2bez 可以将图片字母转为矢量化路径,这是一篇非常详尽的说明。虽然作者在插值方面做了优化,但是目前无法生成各种 overlapping 路径。

相似条目

笔记

Beta

img2bez 是一个用 Rust 编写的 crate,能将栅格图像自动描摹为三次贝塞尔曲线轮廓,并直接写入 UFO 字体源文件。它针对字体设计需求优化,强调结构化节点放置(极值点、拐点、转角),以支持可变字体插值兼容,同时提供 CLI、WASM 浏览器 demo 和 Runebender 编辑器集成。项目包含评估 harness,可通过 agent 循环自动调参,目标是让描摹结果 90% 接近设计师手绘质量。

img2bez 核心采用 Rust 实现,既可作为原生库嵌入字体编辑器,也可编译为 WASM 在浏览器运行,还提供独立 CLI 工具。其 Rust 代码直接调用 kurbo 进行曲线拟合,并通过 marching squares 精确提取边缘,确保描摹过程快速、确定性且无需 GPU。

UFO(Unified Font Object)是 img2bez 的主要输出格式,它能将描摹后的轮廓、度量信息和 Unicode 直接写入 UFO 源文件或 GLIF。工具将描摹与放置分离,允许调用者按自身度量规则将轮廓置入 UFO,同时保持与字体生态的完全兼容。

本文中 WebAssembly 是 img2bez Rust 代码的编译目标,用于在浏览器中运行交互式演示。用户可直接拖拽图片并点击 Trace 按钮查看矢量轮廓生成结果,同时支持 Runebender-Web 等网页版字体编辑器调用同一套追踪逻辑,实现无需后端即可完成的本地化处理。

Runebender 是基于 Rust 的字体编辑器,分为 Xilem 桌面版和 Web 版。本文中 img2bez 被集成到 Runebender 中,用户可在字形视图拖入栅格图像,右键选择 Trace Image 即可直接生成符合 UFO 规范的矢量轮廓并插入当前字形。

Potrace 是 Peter Selinger 2003 年发布的经典开源追踪器,被 Inkscape 和 FontForge 采用。本文指出其先二值化再拟合多边形最后转 Bézier 的流程更关注轮廓保真,而非字体所需的极值点、水平垂直手柄等结构特征,因此生成结果常需人工二次清理。

vtracer 是 VisionCortex 用 Rust 编写的现代通用追踪器,速度快且支持彩色输入。本文将其与 img2bez 对比:vtracer 追求像素级保真,输出密集点集而忽略字形结构,导致无法直接用于可变字体插值;img2bez 则针对字体源文件优化点位放置规则。

Kurbo 是 Raph Levien 的曲线处理库,本文用作 img2bez 的备用拟合后端。当结构化点位无法满足约束时,img2bez 调用其 fit_to_bezpath_opt 获得最少段数立方 Bézier;同时 img2bez 重写了切线计算逻辑,强制在极值点处生成水平或垂直手柄。

MCP 是 img2bez 提供的服务器实现,位于 mcp/ 目录,通过 stdio JSON-RPC 协议暴露 trace_glyph 工具。AI 代理可借此原生调用追踪器,将光栅图像直接转换为兼容 UFO 的结构化轮廓。

img2bez 通过结构化节点规则确保同一字形不同 master 的描摹结果具有相同点数与顺序,从而天然支持可变字体插值。当 master 间存在拓扑差异时,它提供 reconcile pass 自动插入对应节点并统一段类型,同时输出置信度报告供后续审查或重生成使用。

Glyphs 是一款字体编辑器,它与 FontLab 一样,将 G2 调和(harmonize)操作作为手动命令暴露。img2bez 在清理阶段自动执行相同操作,使平滑节点两侧曲率匹配。

FontLab 是一款字体编辑器,它与 Glyphs 一样,将 G2 调和(harmonize)操作作为手动命令暴露。img2bez 在清理阶段自动执行相同操作,使平滑节点两侧曲率匹配。

本文核心工具 img2bez 实现了一种面向字体设计的自动描边流程。它先通过 marching squares 精确提取边缘,再按极值点、拐点和直线规则放置节点,最后拟合三次贝塞尔曲线并对齐水平/垂直控制柄,从而生成可直接用于 UFO 源文件的结构化矢量轮廓,避免了传统描边工具仅重现轮廓而忽略排版结构的问题。

img2bez 将栅格图像转换为三次贝塞尔曲线轮廓,节点严格放置在极值点、拐点和转角处,并强制水平/垂直控制柄,以符合字体设计规范。它在结构节点间拟合曲线,必要时回退 kurbo 的最优拟合,同时通过 refine 阶段微调控制柄长度,使轮廓既贴合像素又满足插值与 hinting 要求。

该分类暂无内容

Eli Heuer 是 img2bez 项目的开发者与本文作者。他构建了针对手绘参考的 Rust 自动追踪器,支持将光栅字形直接输出为 UFO 源文件,并配套评估 harness 以驱动代理循环优化。

Raph Levien 的 kurbo 库中的曲线拟合算法被 img2bez 用作后备方案。当无法按极值点与水平/垂直切线约束拟合时,img2bez 调用其 fit_to_bezpath_opt 返回最少立方贝塞尔段。

Spiro 是 Raph Levien 开发的曲线设计系统,本文归类为曲线拟合文献的一部分。它能在已有曲线基础上平滑处理,但假设设计师已手动描边,无法从栅格像素中自动定位极值点和拐点,因此不解决本文核心的 raster-to-structured-outline 问题。

diffvg 是 2020 年发布的可微分光栅化器,以 PyTorch 操作符形式提供,是基于优化的矢量化方法的标准实现。img2bez 借鉴其通过像素对候选轮廓打分的目标,但采用纯 Rust 确定性实现,无需 GPU 或迭代训练即可完成精炼。

本文针对字体设计场景开发 img2bez,重点解决现有自动描摹工具只追求轮廓相似而忽略结构的问题。它遵循最小节点、极值点放置、直线保持直线、墨水陷阱等字体惯例,输出可直接用于可变字体插值的源文件,减少后续人工清理工作量。

本文末尾提到,img2bez 采用与 kurbo 相同的 Apache-2.0/MIT 双许可,而 kurbo 属于 Linebender 生态。该生态为 img2bez 提供了底层曲线处理能力,使其能以 Rust 原生方式嵌入字体编辑器并保持与开源工具链的兼容。