通过删除字形缩小.OTF字体

she*_*nan 23 fonts glyph font-face

我不太相信这个问题没有专门针对OpenType字体,但有没有人知道从这些字体中删除字形的方法?

我有一个非常大的文件大小(几乎10MB)的.OTF,我需要缩小它.原因有两个.

1)我正在尝试为网页嵌入做准备,因此文件越小,客户端就越容易.

2)Font Squirrel(用于轻松准备字体文件)有2MB上传限制 - 我知道有其他选择,但到目前为止都没有成功.为了节省浪费时间,我尝试失败的那些是http://fontface.codeandmore.com/http://www.font2web.com/.CodeAndMore.com似乎有效,但它吐出的字体与我给它的字体完全不同.

请注意我不是字体专家,所以请轻松回答.

Sad*_*Net 18

创建了一个回答此问题的帐户.我知道这是一个老问题.但是得到一个迟到的答案比没有答案更好.

我刚遇到类似的问题.显然,没有Googlable解决方案.因此,我用fontforge库编写了一个Python2脚本,执行以下操作:

  • 接受源字体
  • 接受包含要使用的所有字符的文件.它可以是翻译文件,字符串资产文件,HTML文件等.
  • 输出包含未删除文件中显示的字符的字体

这是代码:

#!/usr/bin/python2
import sys
import fontforge

if len(sys.argv) == 4:
    font = fontforge.open(sys.argv[1])

    f = open(sys.argv[2], "r")

    for i in f.read().decode("UTF-8"):
        font.selection[ord(i)] = True
    f.close()

    font.selection.invert()

    for i in font.selection.byGlyphs:
        font.removeGlyph(i)

    font.generate(sys.argv[3])
else:
    print "WARNING: Check the license of the source font\nbefore distributing the output font generated by this script.\nI'm not responsible for any legal issue caused by\ninappropriate use of this script!\n"
    print "Usage: {} [source font] [file with glyphs NOT to be removed] [output]".format(sys.argv[0])
    print "Example: {} /path/to/ukai.ttc chineseTranslation.txt ukaiStripped.ttf".format(sys.argv[0])
Run Code Online (Sandbox Code Playgroud)

请注意,在某些字体上使用此脚本可能不合法.确保签出源字体的许可证.对于因使用此脚本生成的任何字体而导致的任何法律问题,我概不负责.


Wiv*_*aro 10

FontTools有一个名为pyftsubset的程序

https://github.com/behdad/fonttools

使用类似这样的东西:

pyftsubset MyFont.otf --output-file=MyFontStripped.otf --unicodes-file=file-of-codes.txt
Run Code Online (Sandbox Code Playgroud)

其中file-of-codes.txt包含以下代码列表:

U+09c78
U+09ce5
U+09ce7
U+09ce9
U+09ceb
U+09cec
U+09cf0
U+09cf3
U+09cf4
U+09cf6
...
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 [uni2ascii](http://billposer.org/Software/uni2ascii.html) (bury -> U+09c78) 更改将 unicode 字母转换为 ascii:`uni2ascii -a P letter-in-unicode.txt > letter -in-ascii.txt` (2认同)

cas*_*sin 3

10 MB Opentype 字体非常罕见,因为它的重量很大,所以我认为它是内部特定字体而不是商业字体。要删除字形,您可以在FontForge (免费)或任何其他商业字体编辑器中编辑字体,然后重新生成 .otf(也为 .ttf)

为了构建网络字体(我猜你需要 .ttf、.svg、.eot 和 .woff),你可以在本地使用几个免费工具:sfnt2woffttf2eotBatik SVG,并且使用ttfautohint你可以改进字体在进行转换之前的屏幕。

  • 根据您使用的平台,您可以尝试找到 100% 功能演示。如果您可以使用 Mac OSX,请尝试 [RoboFont](http://www.robofont.com) 或 [Glyphs](http://glyphsapp.com)。我不知道有 Windows 或 Linux 的 100% 功能演示。 (2认同)
  • 看来你对 ASCII 字符集已经足够了。有多种方法可以执行此操作:选择 ASCII 字符集、反转选择、删除(手动)并生成字体。否则,如果您愿意使用[Robofab](http://robofab.org),一个Python库来删除不在给定字符集中的字形,则可以使用它。Glyphs 使用 [.ufo](http://unifiedfontobject.org) 格式。您可以从 Glyphs 导出 .otf。 (2认同)