减小 .ttf 字体文件大小的方法是什么?

42

有没有办法减小.ttf字体文件的大小?即,如果我们想删除一些未使用的字形。

7个回答

27

FontSquirrel的Web字体生成器使减少字体文件大小变得非常容易。

  • 上传您的字体
  • 选择专家...
  • 选择要包含哪些字形
  • 下载您的工具包

我成功将一款263kb的字体缩小至34kb。

FontSquirrel Webfont Generator


2
点击“自定义子集...”单选框以进一步减小文件大小。 - Jeff
1
这个链接现在无法使用。出现了502错误。 - Suprabha
对我来说非常有效。我在一个React Native应用程序中使用的Google字体,原本大小为4.8MB,现在缩小到了40KB。 - Reez0
酷,Material Icon字体从808KB压缩到12KB。 - Martinedo

17

使用谷歌网络字体,您可以限制字符集如下:

//fonts.googleapis.com/css?family=FontName&text=Lorem%20Ipsum

如果Google有像Font Awesome一样的图标字体,那将非常有用。


1
不错的技巧,我不知道那个。你也可以在参数中请求特定的字重(例如:只有粗体,没有斜体或正常)。 - Sahas Katta
1
这并没有回答如何减小已有的TrueType字体文件大小的实际问题,特别是通过删除未使用的字形。它回答了一个不同的问题:“如何从Google Web字体中删除所有多余的字形?” Google字体不是woff2格式,也不是ttf格式,如果您已经有一个想要使用的字体,就不能使用此方法。 - ADJenks

11
你可以使用 fonttools 来从字体中删除不需要的字形。
pip install fonttools
pyftsubset myFont.ttf --output-file=mySmallerFont.ttf --unicodes=U+0020-007E

mySmallerFont.ttf 只包含从 U+0020 到 U+007E(基本拉丁文)的 Unicode 字符。

完整的文档可以在 这里 找到。

您可以在 维基百科 上查看 Unicode 字符列表。


目前来看,这是最简单和最灵活的选择。在cygwin下也可以工作,无需安装pip。 - Max
酷炫而令人印象深刻!我刚刚使用了这个工具,通过选择我所需的子集,将Iosevka字体的大小从6MB减小到了64KB(!):pyftsubset iosevka-medium.ttf --output-file=slim-iosevka-medium.ttf --unicodes=U+0020-007E,U+00A0-00FF该命令选择了“基本拉丁字母”和“拉丁语-1补充”。 - sschober

8

6
我做了以下步骤来删除字体中的所有西里尔字母,因此将文件大小减半,因为我只需要拉丁字母:
  1. 下载FontForge (https://fontforge.github.io/en-US/)
  2. 启动FontForge并打开您的ttf字体文件
  3. 转到编辑 -> 选择 -> 通过脚本选择
  4. 在弹出的选择窗口中从下拉菜单中选择Cyrillic。正如您可能已经猜到,这将标记仅西里尔字母。
  5. 转到编码 -> 拆分和删除字形,确认问题。看看西里尔字母消失了吗?
  6. 转到编码 -> 紧凑以更好地查看剩余字母,这样更容易选择更多要删除的候选项。 (但我不敢手动删除/移除它们。)
  7. 转到文件 -> 生成字体,并不要忘记选择ttf作为输出格式。
请注意,我不是专业人士。但我需要一个快速的解决方案。
在这里你可以阅读更多关于这个主题的内容:http://wiki.unity3d.com/index.php?title=Create_a_new_TrueType_font_using_a_subset_of_characters_from_an_existing_TrueType_font

3
我使用 fontmin 工具来从 ttf 字体中删除字形。
它成功地将 Noto Sans(weight=medium)的大小从20MB减少到不到10MB,同时仍然包含常见的中文/日文字符。

1
这是做什么用的?大多数字体都比较轻巧。TTF存储矢量数据而非位图数据,因此只需要相对较少的字节来描述每个字形的形状。即使是非常繁忙的字体也可以保持在100kb以下。许多现代字体带有ClearType提示,但即使如此,它增加的文件大小也很小。
如果你真的想从字体中取出某些字形,则需要使用字体编辑工具(Macromedia曾经拥有一个名为Fontographer的工具,现在由FontLab拥有)。但最好还是选择一个更轻的字体。例如,OCR A Std仅有30kb,并包括ClearType提示以及所有美国ASCII字符。尽量避免Unicode字体,因为完全支持Unicode需要大量字形。但大多数字体并不提供完整的Unicode支持。
最后,如果您决定修改字体,请确保将其命名为其他名称。命名冲突可能会给用户带来一些非常烦人的意外。

7
复杂的.ttf字体文件很容易达到1MB或更大。 - Mark Phillip
@Mark:也许是Big5或GB字体或其他具有大字符集的字体,但这些都是极端情况。否则,即使非常复杂的西方字体也很少超过500KB,而那些达到500KB的鲸鱼字体可能可以进行优化。 - Lèse majesté
3
但你要求应用程序。 :) 我现在正在处理完全相同的问题。 - Mark Phillip
2
中文字体通常会占用8-12MB的空间,包含20K-40K个单独的字形。 - XML

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接