把自己的字,变成电脑里的字体:我做了一个「手写字体工坊」

把自己的字,变成电脑里的字体:我做了一个「手写字体工坊」

如果电脑里能选到一种字体,名字就叫"我的手写字",会是什么感觉?

给朋友写一张电子贺卡,给照片加一行标题,或者把孩子现在写的字保存下来------屏幕上的每一笔,都能找到纸上对应的那一笔。

最近,我用 C# 做了一个 Windows 桌面小工具:我的手写字体工坊。

它的流程很直观:

选好要制作的字 → 打印模板 → 手写拍照 → 采集与校对 → 导出 TTF 字体。

软件在本地运行,不需要显卡、模型权重,也不需要把照片上传到服务器。

先看一张真实纸张生成的字体预览:

真实手写照片生成的 TTF 预览,阈值125,尚未手工精修

上图由实际生成的 TTF 字体绘制。它还是试用稿,部分细笔画和残留格线需要继续校对。

先用一张纸,试出自己的字体

这次测试用的,就是下面这张手写页。

纸上写了"你好世界""我的手写字体",也写了数字和几个标点。没有精心布光,纸面还有一点明暗变化,更接近日常使用时会遇到的情况。

本次实测的手写模板照片

这张纸一共填写了 41 个字格。测试时,软件找到了四个黑色定位块,也匹配到了页面校验码,完成了这 41 格的采集,并生成了能够加载、显示的 TTF 字体。

不过,真实照片也让问题显现出来了:有些印刷格线,会和手写笔迹一起被采进去。

把墨迹阈值从默认的 170 调到 125 后,格线残留明显减少。但"你"的细笔画有所损失,"2、8、?"附近仍有残线。

默认阈值170与阈值125的实际采集对比

所以,目前更适合把它看作一个"采集后可以继续修"的制字工具。拍照完成后,仍然要看一遍字形,再决定是否导出成品。

软件怎么用?

第一步:输入想做成字体的字

打开软件,在"字符与模板"页面输入字符列表,点击应用。

可以先选一小组有意义的内容:自己的名字、家人的名字、一句祝福语,或者经常用到的标题文字。重复的字会自动去重,不用写两遍。

当前单个工程支持 1~1000 个不同的常用中文、英文、数字和标点字符,第一次建议先试 30~100 字。

写了多少字、确认了多少字,字体里就有多少字。 当前版本不会根据几个样本自动补齐整套中文字库。

第二步:导出模板,拿笔填写

软件按 A4 页面生成书写模板,每页最多 48 格,支持导出 PDF 和 PNG。

PDF 里的格线和提示文字是矢量轮廓,放大查看不会变成整页截图;提示文字没有可复制的文本层。

建议先保存工程,再导出模板。打印时选择实际大小,用黑色笔把字写在对应的浅灰框内,并保留四角定位块和页码校验区。

当前也提供系统打印入口,实体打印机的兼容性还在继续排查。现阶段可以优先导出 PDF 或 PNG,再使用熟悉的阅读器、图片软件打印。

第三步:拍照,采集这一页

写完后,把整页纸拍进去,尽量拍清楚、放平,避免明显阴影。

在"照片采集"页面选择图片,并选择对应页码。软件会尝试自动找定位块;找不到时,也可以按左上、右上、右下、左下的顺序手动点选。

随后点击"采集当前页",各个字形就会进入校对列表。

照片不一定要拍得完全水平,软件会做四点透视校正。但弯曲的纸张、严重模糊和大片阴影,仍然可能影响结果。

还有一个小提醒:更改字符列表后,要重新导出模板。 软件通过页面校验,减少把其他工程或其他页的字形采错位置的情况。

第四步:校对,保留自己的笔迹

"逐字校对"页面提供了画笔、橡皮、撤销和清空操作,也能调整字形大小、水平位置、垂直位置与粗细。

比如拍进来一小段格线,可以用橡皮清掉;漏了一小段细笔画,可以补回来。对字形满意后,再点击确认。

逐字校对界面:画笔、橡皮、撤销及字形调整

这张界面图使用合成测试笔画演示操作;本文前面的实拍照片、字体预览和阈值对比,才是本次真实手写测试的结果。

中文里,一个字往往包含几个分开的部分,例如"湖""谢"。软件按整格采集这些部分,保留它们在格中的相对位置。"一"这样的简单字,也不会因为笔画少就被拉伸成满格。

第五步:预览句子,导出 TTF

在"字体预览"页面输入一句话,就能查看自己的字排在一起是什么效果。

预览使用真正生成的 TTF。遇到没有制作的字,软件会显示红框,方便发现缺字。

导出时会生成两个文件:

  • TTF 字体文件:可以在支持自定义字体的软件中使用。
  • 字符覆盖清单:记录这次实际导出了哪些字,还有哪些字没有导出。

需要在其他软件中使用时,可以通过 Windows 安装导出的字体,再选择对应的字体名称。部分软件需要重新打开,才能刷新字体列表。

它是怎样把照片变成字体的?

这套流程主要依靠图像处理和字体文件生成。

首先,通过四个定位块估计纸张的位置,把拍斜的页面映射回模板坐标。每个书写框的位置已知,因此可以按格提取图片。

字形对应哪个字,由模板事先确定。 比如"湖"所在的格子,采集出来就对应"湖";这里不依赖手写文字识别来猜字。

然后,软件结合灰度和局部亮度差,把墨迹与纸张背景分开。这个步骤也解释了为什么阈值需要调整:阈值放得宽,容易混入格线;收得紧,又可能丢掉浅笔画。

接下来,软件追踪墨迹的外轮廓和内部孔洞,将轮廓转换成矢量字形,保存字符映射、字形位置等信息,最后组装为 TTF 文件。

生成后的字形可以按字号缩放。当前轮廓还没有专业字体那样的小字号精修,比较适合先用于姓名、贺卡和个性标题。

对 C# 开发者,也是一份可以拆开学习的项目

项目采用 C# WinForms、.NET Framework 4.8、x64,提供完整的 VS2022 解决方案。

窗体保留 .Designer.cs,方便在设计器中调整布局。图像预览和字形编辑使用标准控件配合绘制事件;模板布局由预览、PDF 和打印功能共用。

工作目录默认是 EXE 旁的 workspace,按程序所在目录解析相对路径,便于把软件与数据一起移动。工程文件自带字形和调整参数,保存工程后,后面还可以继续补字。

这个选题参考了 draw-your-font(github.com/danilo-znam... 的使用流程。本项目重新实现了中文固定格采集、校对界面和基本 TTF 生成,没有捆绑上游的 Node 或 Potrace 运行环境。

如果你对桌面图像处理、矢量轮廓、字体文件结构、PDF 排版感兴趣,可以沿着这条流程逐步看下去。

可以拿它做些什么?

我比较喜欢的几个用途是:给朋友做一张带自己笔迹的贺卡,给家庭相册写标题,或者隔一段时间采集一次孩子的字,留下成长的变化。

不用一开始就想着做几千个汉字。先把一句想留下的话做出来,就已经能看到这件事的乐趣。

当前版本支持 Windows 10/11 x64,需要 .NET Framework 4.8。常用汉字、数字和标点可以按需制作;emoji、扩展区汉字以及自动补全字库暂不支持。

接下来会继续打磨格线抑制、浅笔画保留和真实照片的采集效果。这次实拍已经帮我们找到了很具体的改进方向。

想交流软件使用、源码学习和后续改进,欢迎加入:

QQ群:天天代码码天天

群号:264292622

也欢迎分享你想用自己的字体写下的第一句话。

相关推荐
小海测评1 小时前
Schema 结构化标记:GEO 优化容易漏掉的技术抓手
人工智能·geo·企业获客
武天旭1 小时前
AI安全--AI大模型的虚假信息识别与多模态过滤
人工智能·安全
iiiiii111 小时前
大模型批量生成中的左填充 (left padding)与右填充 (right padding):从生成正确性到 GRPO 的混合策略
人工智能·机器学习·语言模型·大模型·llm·attention·注意力
YH_Analytics1 小时前
2026-2032 年中央鸡蛋输送机市场规模与增长预测
网络·人工智能
志尊宝1 小时前
AI原生前端开发(031):AI辅助的性能分析与瓶颈定位
javascript·人工智能·ai-native
2601_965305391 小时前
AI在监测站最先干的活,不是预测,是“挑错“
人工智能
xsd202411181 小时前
智慧园区视觉系统架构:算法平台与业务平台怎么搭,多模型怎么管
人工智能
cnbestec1 小时前
XARION 光学麦克风实时监控超短脉冲激光车削:50 kHz–2 MHz 声发射解析材料去除与加工进度
人工智能
Elastic 中国社区官方博客1 小时前
Elastic 重大事件功能如何将 100 条日志样本转化为检测规则
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎