近期沉迷用墨水屏读小说,用的是「方正细金陵」「喜鹊宋体」两款刻本风格的宋体,看古代背景的故事很有感觉。缺点是这两个字体在同一字号下比我其他常用的字体小一圈,每次换字体都要手动调整字号,不是很方便。在GPT老师帮助下 写了个 命令行版本的FontForge 脚本,将字体整体放大约 1.1 倍来解决这个问题。
# xique_enlarge_112.pe — 放大 112% + 修正垂直度量(legacy 脚本)
# 用法:
# fontforge -lang=ff -script xique_enlarge_112.pe "原字体.ttf" "输出.ttf"
if ($argc < 3)
Print("Usage: fontforge -lang=ff -script xique_enlarge_112.pe input.ttf output.ttf")
Quit(1)
endif
infile = $1
outfile = $2
Print(">>> Opening: " + infile)
Open(infile)
# 重命名,避免与原字体冲突
SetFontNames("XiQueSong-Plus112", "XiQueSong Plus 112", "Regular")
# 等比放大 112%(可改 108–115%)
SelectAll()
Scale(112, 112)
# 读取放大后全局包围盒并取整(SetOS2Value 需要整数)
bbox = GetFontBoundingBox() # [xmin, ymin, xmax, ymax]
ymin = Floor(bbox[1])
ymax = Ceil(bbox[3])
# OS/2 / hhea 垂直度量(通用做法:Win 用极值正数;Typo/hhea 对齐,LineGap=0)
SetOS2Value("WinAscent", ymax)
SetOS2Value("WinDescent", -ymin) # 正数
SetOS2Value("WinAscentIsOffset", 0)
SetOS2Value("WinDescentIsOffset",0)
SetOS2Value("TypoAscent", ymax)
SetOS2Value("TypoDescent", ymin) # 负数
SetOS2Value("TypoLineGap", 0)
SetOS2Value("HHeadAscent", ymax)
SetOS2Value("HHeadDescent", ymin) # 负数
SetOS2Value("HHeadLineGap", 0)
Print(">>> Generating: " + outfile)
# 如需“空 DSIG”可改为:Generate(outfile, "", "dummy-dsig")
Generate(outfile)
Print(">>> Done")
Quit(0)
把上述代码保存为enlarge.pe文件,把字体和脚本放到一个文件夹里,从文件夹进入终端,然后在bash中执行
fontforge -lang=ff -script enlarge.pe "xique.ttf" "xique_plus112.ttf"
- enlarge.pe 脚本名称
- "xique.ttf" 要处理的字体名称
- "xique_plus112.ttf" 处理后的字体名称


处理后的字体同样字号下大了一圈
Comments NOTHING