gpt4 book ai didi

python - 使用 fontforge 和 fonttools 创建轻量级后备字体

转载 作者:行者123 更新时间:2023-11-28 19:29:03 27 4
gpt4 key购买 nike

对于网络应用程序,如果我的网络字体不包含字符,我需要一种方法来防止浏览器回退到另一种字体。似乎唯一的方法是向 fontstack 添加另一种字体,其中包括“所有”可能的字符 1 .

已经存在fallback fonts ,但它们更多的是调试助手,因为它们将代码点显示为数字,因此它们非常重(> 2MB)。

我的用例的后备字体应该只显示一个框之类的东西来表示缺少字符。

我的想法是生成一种只有一个字形的简单字体,并应用一个功能文件,该文件将用这个字形替换所有字形。

我的 fontforge 脚本:

import fontforge
import fontTools.feaLib.builder as feaLibBuilder
from fontTools.ttLib import TTFont

font_name = 'maeh.ttf'
font = fontforge.font()
glyph = font.createChar(33, "theone")
pen = glyph.glyphPen()
pen.moveTo((100,100))
pen.lineTo((100,500))
pen.lineTo((500,500))
pen.lineTo((500,100))
pen.closePath()

for i in range(34, 99):
glyph = font.createChar(i)
glyph.width=10

font.cidConvertTo('Adobe', 'Identity', 0) # doesn't make a difference

font.generate(font_name)

font = TTFont(font_name)
feaLibBuilder.addOpenTypeFeatures(font, 'fallback.fea')
font.save("fea_"+font_name)

我的特征文件:

languagesystem DFLT dflt;

@all=[\00035-\00039];
#@all=[A-Z] this works

feature liga {
sub @all by theone;
} liga;

但是上面的结果是

KeyError: ('cid00037', 'SingleSubst[0]', 'Lookup[0]', 'LookupList')

随着 cid00037 的数字变化。

如果我使用 Feature 文件中注释掉的 A-Z,它就可以工作,所以这种方法似乎并不是完全错误的。

如果我在 CID 表示法中指定范围,为什么 fonttools 找不到字形?是否有另一种方法可以为包含所有字形的 OpenType 功能文件创建一个类?

最佳答案

在处理上述问题时,有人提示我 Adobe NotDef字体,这几乎是我一直在寻找的。出于某种原因,我无法使用 fontforge 将 Adob​​e NotDef 的 .otf 转换为 woff 或 woff2。此外,所有用于创建网络字体文件(如 fontsquirrel)的在线工具都失败了。为了创建 woff 文件,我使用了 woff-tools 包中的 sfnt2woff。对于我使用的 woff2 文件 https://github.com/google/woff2 .

关于python - 使用 fontforge 和 fonttools 创建轻量级后备字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com