【问题标题】:TFF file inner information extraction by Java or C#通过Java或C#提取TFF文件内部信息
【发布时间】:2020-09-13 22:33:05
【问题描述】:

目前,我正在开发 TTF 字体相关软件。我需要创建一些工具来提取 TTF(给定字体)文件中包含的 Kerning 和 Ligature 信息。

我搜索了很多资源,但找不到任何有用的信息。

对 Java 或 c# 有什么看法?

谢谢。

【问题讨论】:

  • TTF 文件格式规范是一个很好的起点:developer.apple.com/fonts/TrueType-Reference-Manual
  • 我看过那篇文章。我需要使用java代码或c#代码提取信息。
  • 有两种可用于 OpenType 字体的字距调整信息:“kern”表或“GPOS”表中的字距调整。连字将由“GSUB”表中的数据提供。 'kern' 表并不太复杂,但 'GPOS' 和 'GSUB' 表相当复杂。 docs.microsoft.com/en-us/typography/opentype/spec 我已经开始使用 C# project 来解析 OpenType 字体数据,但我还没有添加 kern、GPOS 或 GS​​UB 表。 (我前段时间做了另一个实现,但还没有全部移植。)这不是微不足道的!
  • 顺便说一句,如果你解释了你到底想要做什么,它可能会有所帮助。当您说“提取字距调整和连字信息”时,您希望得到哪些具体信息以及如何使用它?
  • @PeterConstable 感谢 cmets。我想在特定的 TTF(字体)文件中列出所有可用的字距调整和连字信息。 (作为第一步,最好有Kerning信息)

标签: java c# truetype kerning ligature


【解决方案1】:

您尚未指明您正在使用的平台/框架/库。而且你所追求的东西有些复杂。

TrueType/OpenType 长期以来一直支持带有字距调整数据的'kern' 表。

Windows GDI 具有GetKerningPairs() 函数,该函数从字体的“kern”表(如果存在)返回所有数据。它的局限性在于它不能支持 Unicode 补充平面字符(码位 U+10000 及以上)。

Windows DirectWrite 有一个类似的 API:IDWriteFontFace1::GetKerningPairAdjustments()。但是,它可能不是您所追求的:它没有列出字体的字距调整对,而是采用字形序列并返回该序列的调整。 DWrite 还有IDWriteFontFace1::HasKerningPairs(),它会告诉你字体是否在“kern”表中有字距调整对。

但这里增加了复杂性:“kern”表是较旧的技术,后来被 OpenType 布局机制取代。字体可以有一个'GPOS' table,指定不同类型的字形定位调整:

  • 调整单个字形的前进宽度或 x,y 位置
  • 在一对字形上调整前进/位置
  • 在特定上下文中调整单个字形或一对字形的位置

可能出于多种不同原因进行定位调整;您感兴趣的案例“kerning”将链接到“kern”功能标签。您可以使用IDWriteFontFace::TryGetFontTable 之类的 API 来检索 GPOS 表数据并自行解析。您需要检查 GPOS 表的 FeatureList subtable 以找到与“kern”特征关联的 FeatureTable,并(如果存在)从该特征表中获取查找索引数组。然后您可以在 GPOS 表的LookupList subtable 中查找指定的 Lookup 表。然后,您需要为每个指定的 Lookup 表解析 Lookup 子表,以确定对哪些字形或字形对执行操作。

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多