使用FontForge和FontCreater创建自己的字体

效果预览

enter image description here

环境准备

FontForge

https://github.com/fontforge/fontforge

FontCreater

http://www.mydown.com/soft/359/509448859.shtml

格式转换

使用在线转换工具将pdf等格式转化成矢量图svg(缩放后不会失真)

https://onlineconvertfree.com/zh/convert-format/pdf-to-svg/

图像切割

将svg格式的矢量图按照方格切割,并另存为对应文字的unicode编码,如将“丢”另存为 20002.svg (“丢”转换成unicode用10进制表示为20002)

思路
  1. 使用Adobe Illustrator的切片工具进行切割,但是切片只能批量保存为png等位图格式,不能保存为svg..
  2. 研究svg的编码格式,从svg文件中直接提取出需要的文字
SVG
  • SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
  • SVG 用来定义用于网络的基于矢量的图形
  • SVG 使用 XML 格式定义图形
  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
  • SVG 是万维网联盟的标准
  • SVG 与诸如 DOM和 XSL 之类的W3C标准是一个整体

SVG的元素用于定义一些复杂的图形。它可以结合使用直线,曲线等来制作各种不规则的图形。元素是SVG基本图形中最为复杂的一个。

上面代码的返回结果如下: 可以看到SVG图像中包含一条曲线和俩条直线,并且第二条直线是立刻第一条直线一段距离的。 所有的这些绘制工作都是在元素中通过d属性来完成的。属性包含了一些用于绘制的命令。在上面的例子中,M命令代表“Move to”(移动到)的意思。A命令代表一个“arc”(弧线)。L命令代表“Line”(直线)。这些命令都由一支“虚拟的画笔”来执行,这支笔可以移动和绘制图形。

我们发现在SVG文件格式中,除了相同的文件头和文件尾外,总是先用M指令移动到某一点,然后再根据偏移画直线和曲线,于是想到用以下方法来实现切割:

enter image description here

python脚本如下

图像切割后保存的结果

enter image description here

批量导入字形

字形示例

enter image description here

在FontForge的帮助文档中可以找到脚本的用法

新建script.pe,输入

保存,然后在命令提示符输入

即可将字形批量导入生成一个u.sfd的工程,用fontforge打开该工程,点击生成ttf即可生成自己的字体

参考

https://blog.csdn.net/huanhuanq1209/article/details/71425032