制作思路
其实就是将字模转换成矢量字体。如果自己在游戏引擎中解析和绘制字模感觉比较麻烦工程量不小。所以将其转换成矢量字体会更加容易使用。
经bitca的推荐,了解到了HZK16这个16×16的字模。这个字模的版权其实算是比较模糊,年代也比较久远(可能要追溯到DOS时代)而且很多嵌入式硬件厂商都直接拿来商业使用,所以拿来游戏中使用应该问题不大。
制作的基本思路就是提取字模全部文字,解析字模并且绘制成PNG图片,再使用Potrace把像素PNG图片转成矢量SVG图(通过ImageMagick),最后再把SVG图片导入FontForge中就制作完成了。
制作过程
主要使用的是Python, 解析字模参考这篇文章。而绘制PNG图片也很简单,解析完成之后会得到汉字的数组,通过Python的pillow库进行绘制成PNG。而后通过脚本(png2svg.sh)将其转成SVG:
#!/bin/bash
File_png
=
"${1?:Usage: $0 file.png}"
if
[[ !
-
s
"$File_png"
]]; then
echo >&
2
"The first argument ($File_png)"
echo >&
2
"must be a file having a size greater than zero"
(
set
-
x ; ls
-
s
"$File_png"
)
exit
1
fi
File
=
"${File_png%.*}"
magick
"$File_png""$File.pnm"
# PNG to PNM
potrace
"$File.pnm"
-
s
-
o
"$File.svg"
# PNM to SVG
rm
"$File.pnm"
# Remove PNM
而后运行png2svg.sh pngfile 就会得到SVG图片。
可以把汉字与其对应的图片写入到一个文件中,后面就可以读取文件得到一一对应汉字和文件名字,然后这些可以使用脚本批量生成,也就会得到6000多个SVG文件。
再接下来就是使用命令导入到FontForge中,FontForge的脚本资料很少,这个是我的脚本文件,命名为convert.pe
#! /Applications/FontForge.app/Contents/MacOS/FontForge
fontName
=
"9"
svg_file
=
"186_item.svg"
Open
($
1
)
list
=
Ucs4(fontName)
num
=
list
[
0
]
Select(num)
Cut()
Import(svg_file)
Save()
这个脚本作用就是找到对应的汉字,然后导入SVG图片再保存。本来是想通过命令行传入两个参数:汉字和SVG文件名字。但是一开始是在Windows上,可能编码问题命令行传入的汉字和实际不一样。折中方案就是通过脚本直接修改这个脚本文件中的两个值,然后再执行脚本。不过最后还是使用Mac来执行脚本,Windows编码问题总是感觉问题多多。
而在Mac上最好是通过这样方式来执行脚本:
FontForge -script convert.pe test.sfd
最后就是读取配置写一个循环来导入每个汉字就可以了。但这里也是会遇到一个坑,可能是执行脚本速度太快,一个脚本还没关闭另外一个脚本就打开工程,这样同时打开同一个工程可能会导致数据丢失,后来把每次执行脚本时间调大之后就不会常常丢失数据。我是100,200个汉字间隔这样手动执行然后对比以前版本看看有没丢失(感谢git),不然全部都一次执行要等待时间太久。这些全部导入等待时间基本花了我三天左右……
这个字体的优缺点
字体只有6000多个汉字,覆盖一般使用场景基本没有问题。缺点也明显,字数不够多没有覆盖日语韩语字,而且宋体感觉不如最像素字体好看。
下载地址
这个字体叫做ipix( indie pixel font ),适合于跟我一样资金有限但又期望在商业游戏中使用像素字体的小开发者。
itch: https://purestudio.itch.io/ipix
我对你的方法做了一些改变,不导出图片,直接读取字模信息 然后调用fontforge的内部绘制函数。可以一口气全部生成,不过也有点问题就是有很多重复的点(虽然不影响使用)。
https://indienova.com/home/blogread/26923
@hata:赞!我后来做了像素字体编辑器(可以解析文泉驿BDF和HZK系列),里面使用了自定义字模,不过我还是用SVG导入到工程的方法,不过直接用python脚本导出ttf或者sfd工程,耗时其实也不久.
由于我做的是编辑器,不希望每个人都下载一份FontForge,所以我直接拷贝了FontForge的python runtime来做,这样既不用下载FontForge也不用下载python.
@Codinggamer:您好,不知道可否跟您伸手討個編輯器?我自己是按照「如何将点阵汉字矢量化」已經將點陣字模導出成BDF,但無奈不是碼農背景....你們說的用腳本繪製成SVG再導出TTF這些工作我怎麼看都看不懂....Orz
也試著搭建python環境,但還是一籌莫展.....只能奢望您施捨您所說的編輯器工具了....如果有幸的話,再請您成全!感謝!
@艾因:哈哈,还没做好。。。