【问题标题】:Filling in missing glyphs in fonts with fontforge使用 fontforge 填充字体中缺失的字形
【发布时间】:2015-10-21 21:21:34
【问题描述】:

背景

我正在尝试使用以下 fontforge 脚本将 Google Noto Sans JP 字体从 .otf 转换为 .ttf

#!/usr/bin/env fontforge

Open($1)
CIDFlatten()
Generate($1:r + ".ttf")
Close()

当我在.otf 上调用Open 时,我收到大量错误消息,提示有很多缺失的字形:

No glyph with unicode U+07d22 in font
No glyph with unicode U+07d2f in font
No glyph with unicode U+07da0 in font
...

我的脚本将.otf 转换为.ttf,但是,果然,当我加载字体时,这些字符并没有呈现(它们看起来像这样:[X])。

所以我想填补空白并将相同的字形复制到缺失的插槽中。

问题

所以我运行以下脚本来尝试用相同的字形 (U+f96a) 替换缺失的字形之一 (U+7d22):

#!/usr/bin/env fontforge

Open($1)
CIDFlatten()

Select(0uf96a)
Copy()
Select(0u7d22)
Paste()
SelectNone()

Generate($1:r + ".ttf")
Close()

然而 fontforge 无法选择不存在的字符 U+7d22:

Select: Character not found: U+7D22

有谁知道如何将字形复制到没有字形的代码点?

或者换句话说,有谁知道如何填补这个字体的空白?

【问题讨论】:

  • 等一下,备份。 为什么您要从otf 转换为ttf? (字体会变大,所有字形轮廓都会有损地从三次贝塞尔曲线转换为二次贝塞尔曲线)
  • 仅仅因为我想在其中使用字体的程序支持ttf 而不是otf - 我真的不介意在退回到不太高级的格式时所涉及的损失。跨度>
  • 这就留下了“哪个程序?”的问题。因为 ttf 和 otf 都是 OpenType 字体,所以支持具有 ttf 扩展名但不具有 otf 扩展名的 OpenType 字体的程序值得作为“这就是我需要它的”问题陈述的一部分进行解释。
  • @Mike'Pomax'Kamermans 如果没有这样的上下文,这是一个有用的问题。我需要为 Magento 2 回答这样一个问题:Magento 2.3 支持的 PHP Zend_Pdf 没有实现日语、韩语或中文字符集,这意味着需要这种字体技巧,因为好的免费 .ttf 亚洲字符集很薄弱
  • 不,你不知道:PDF,adobe 的格式,非常支持 otf,Adobe 的首选格式。事实上,它支持所有 OpenType 风格,因为 ttf 和 otf 都只是 opentype 字体。还有很多不错的免费 opentpye CJK 字体。

标签: unicode fonts truetype opentype fontforge


【解决方案1】:

原来ttf格式可以“填补空白”,所以我先转换字体,然后复制字形,如下所示:

#!/usr/bin/env fontforge

Open($1)
CIDFlatten()
Generate($1:r + ".ttf")
Close()

Open($1:r + ".ttf")

Select(0uf96a)
Copy()
Select(0u7d22)
Paste()
SelectNone()

Generate($1:r + ".ttf")
Close()

【讨论】:

  • 嘿,这一切都很好,但是我该如何处理整个字体呢?
猜你喜欢
  • 2022-07-09
  • 1970-01-01
  • 2015-04-23
  • 2022-08-14
  • 2017-12-24
  • 1970-01-01
  • 2018-06-02
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多