「Font」- 合并两种字体

  CREATED BY JENKINSBOT

解决方案

通过 fontforge 命令,能够进行字体合并。

第一步、安装工具

BLFS / FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html
Homepage: http://fontforge.sourceforge.net/
FontForge 与字体设计: http://designwithfontforge.com/zh-CN/index.html
Documentation: http://fontforge.github.io/en-US/documentation/

FontForge,包含一个轮廓字体编辑器,可以创建自己的postscript,truetype,opentype,cid-keyed,multi-master,cff,svg,bitmap(bdf,FON,NFNT)字体,或者编辑现有的字体。

从发行版的源中安装

apt-get install fontforge

使用源码编译安装

参考BLFS/FontForge-20160404: http://www.linuxfromscratch.org/blfs/view/7.10/xsoft/fontforge.html
或者 Installing FontForge from Git Source Code: https://github.com/fontforge/fontforge/blob/master/INSTALL-git.md

安装的可执行程序

fontforge,is a program that allows you to create and modify font files.
fontimage,is a program that produces an image showing representative glyphs of the font.
fontlint,is a program that checks the font for certain common errors.
sfddiff,is a program that compares two font files.

第二步、合并字体

准备要合并的两种字体

这里以Courier10 BTMicrosoft YaHei为例。

请自行下载两种字体。其中Courier10 BT提供英文字符显示,而Microsoft YaHei提供中文显示。

创建字体合并脚本

# 一下为脚本内容,脚本名为:

# Courier字体
# 其中courier.ttf,为字体文件名。
Open("courier.ttf")
SelectAll()
ScaleToEm(1024)
Generate("Temporary-A.ttf", "", 0x14)
Close()

# Microsoft YaHei字体
# 其中yahei.ttf,为字体文件名。
Open("yahei.ttf")
SelectAll()
ScaleToEm(1024)
Generate("Temporary-B.otf", "", 0x14)
Close()

# 合并两种字体
# Monaco_Linux.ttf 为 A 字体
# PowerlineSymbols.otf 为 B 字体
# Monaco for Powerline.otf 为合成字体
# SetFontNames("Monaco_for_Powerline", "Monaco for Powerline", "Monaco", "Regolare", "")
# Monaco_for_Powerline 为 PostScript 名称
# Monaco for Powerline 为全名
# Monaco 为家族名
# Regolare 为样式
Open("Temporary-A.ttf")
MergeFonts("Temporary-B.otf")
SetFontNames("Courier_And_Yahei", "Courier And Yahei")
Generate("courier-yahei.otf", "", 0x14)
Close()

使用脚本进行合成

执行命令生成字体:

# fontforge -script courier-yahei.pe

上述命令会生成courier-yahei.otf字体文件。

参考文献

Merging two fonts: https://superuser.com/questions/490922/merging-two-fonts
在 Linux 下字体合成: https://dctm.github.io/blog/skill/linux-font-matge.html