特定字形的子集字体

Ter*_*den 8 unicode fonts truetype webfonts font-face

我有一个14MB的TTF,主要包含简体中文字符.

我想通过创建一个仅包含HTML页面中特定字符的子集来减小大小.

因此,理想情况下,我想将(Linux)程序传递给一个文本块,并根据所包含的字符重新创建字体.

例如

 ./magic-font-squisher input.tff "ABC123???"
Run Code Online (Sandbox Code Playgroud)

要么

 ./magic-font-squisher input.tff /path/to/test.html
Run Code Online (Sandbox Code Playgroud)

然后新字体将只有9个字符.

thr*_*onk 7

您可以通过脚本FontForge来实现。尽管可以使其变得更聪明或包含在包含的脚本中,但此方法可行。

#!/usr/bin/env fontforge
Open($1); # first param
SelectAll();
SelectFewer(0u41, 0u43, 0u31, 0u33); # a range
SelectFewer(0u6c34); # or a single codepoint
SelectFewer(0u5c0f);
SelectFewer(0u957f);
DetachAndRemoveGlyphs();
Save($2); # second param
Quit(0);
Run Code Online (Sandbox Code Playgroud)

我必须FONTFORGE_LANGUAGE在运行它之前定义:

FONTFORGE_LANGUAGE=ff ./squish source.ttf squished.ttf
Run Code Online (Sandbox Code Playgroud)

  • 较新的文档:[介绍](http://fontforge.github.io/en-US/tutorials/scripting/),[函数参考](http://fontforge.github.io/en-US/documentation/scripting /native/scripting-alpha/)。另请注意,“SelectFewer(0u41, 0u43);”是范围“[0u41, 0u43]”,而“SelectFewer(0u41, 0u43, 0u31, 0u33);”是两个范围“[0u41, 0u43]”的并集, `[0u31, 0u33]`(答案有点不清楚)。另外,有人可能想要通过命令“Reencode('compacted');”来使用紧凑字体。顺便说一句,感谢您的出色回答! (2认同)

Ter*_*den 5

使用过https://bitbucket.org/philip/font-optimizer/src

./subset.pl --chars="ABC 123 ???" input.ttf output.ttf
Run Code Online (Sandbox Code Playgroud)

这正是我想要的.

我怎么找到它

Google字体目录包含一个子集工具.该自述

--string =:仅为指定的字符串生成子集.用于创建菜单子集.但是,我们通常会使用Font Optimizer中的subset.pl进行此操作.

搜索Font Optimizer将我带到了一个允许您测试脚本的演示站点.

还有一个分叉的GitHub仓库,它有更好的文档.

  • subset.pl一直在Font/Subsetter.pm第1496行的子例程条目中返回```宽字符.``任何想法? (2认同)