gpt4 book ai didi

fonts - Web 浏览器如何实现字体回退?

转载 作者:行者123 更新时间:2023-12-04 13:38:35 25 4
gpt4 key购买 nike

我很想知道字体回退在字体整形/渲染堆栈中的位置。换句话说,在什么时候检测到缺失的字形以及如何替换它们?

我在 this 看到文档说明 FontConfig 工具“透明地基于字形覆盖”执行字体回退。

所以问题是:

  • 这个算法究竟是如何工作的?
  • 这是大多数浏览器使用的标准算法 - webkit、gecko(可能不是 IE)吗?
  • 基于确实存在的字体中缺失字形的字体回退如何与 CSS 字体回退(当字体完全丢失时指定依次使用哪些字体)相关?

  • 编辑:我找到了 this解释 FontConfig 的“内容”的文档,但不解释“如何”。问题 1 是关于“如何”的。

    总而言之 - 这篇文章真的只与一件事有关 - 当字体中缺少字形时,字体回退如何工作。

    最佳答案

    浏览器中的字体回退(而不是说,在操作系统中)基于两件事:

  • CSS 规范,它给出了用于回退的字体,以及
  • 文本引擎,进行文本整形。

  • CSS 规范在这方面相当简单,只是使用它们的系统名称给出字体列表,但有几种可能的“捕获所有”字体不能保证从计算机到计算机都相同(没有理由假设例如, serif 映射到 TimesTimes New Roman )。

    文本引擎使用的回退算法完全取决于引擎,但通常在字形查找步骤期间起作用:文本引擎看到一串代码点,并尝试使用字体来塑造该字符串。对于序列中的每个点,它会检​​查字体是否具有匹配的字形(通过查询 CMAP 表和子表),或者通过规则告诉引擎只有在有更多代码点时才能使用字形GSUB机制(例如,没有标志符号的单个字母 etc的字体,但与 &的字形和GSUB规定说序列 e + t + c应在文本替换为单个字形 & ),当它完成这种“点的单位”的积累后,它会塑造文本并将其交还给任何要求它塑造文本的人。

    如果在字形查找期间发现字体不包含任何让引擎塑造特定代码点的内容(即通过 CMAP 数据以及 GSUB 规则仍然显示“没有字形”),则文本引擎可以做两件事:
  • 放弃。没有字形,而是使用定义为字形 ID 0 的 .notdef 轮廓,并且通常为您提供带有可爱空框(字体人员亲切地称为“ bean 腐”)或问号的文本。
  • 尝试字体回退,它将尝试另一种字体为不支持的代码点找到字形。

  • 使用回退时,引擎可以向下查找替代字体列表,直到:(a) 找到字形,或 (b) 列表已用完,此时引擎必须放弃,并将使用 .notdef 字形.引擎是否从原始字体或列表中的最后一个字体中获取 .notdef 字形完全取决于引擎(尽管通常它会使用第一个字体,以便于易读性)

    在任何地方都没有为此定义的“标准”算法;字体回退基本上是文本引擎作者提供的一种便利机制,就像浏览器如何带有书签管理器一样(方便,而不是任何规范的一部分)。就 OpenType 而言,对于引擎是否应该在找不到字形时只提供 .notdef 或是否应该提供它可以塑造的部分,然后在其他地方找到丢失的字形并渲染文本没有要求那样。 CSS 意味着你的文本引擎至少应该有某种形式的字体后备,但它没有指定它应该如何工作,或者它应该何时启动。

    关于fonts - Web 浏览器如何实现字体回退?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241764/

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