【问题标题】:What's the difference between roboto-android and roboto-unhinted?robots-android 和 robots-unhinted 有什么区别?
【发布时间】:2016-11-02 06:20:51
【问题描述】:

我正在开发一个需要使用 Roboto 字体来呈现 UI 的 Android 应用。

根据https://github.com/google/roboto/releases,Roboto字体分为三种:

Google 说:

提示字体

提示是嵌入在字体中的关于如何修改的说明 (扭曲)在低分辨率显示器上看起来更好的字形。作为一个 权衡,有提示的字体比无提示的字体占用更多的空间。

Roboto 和 Noto 都有暗示和不暗示的版本。谷歌 建议:

  • 在不实现提示的 Android 和 Mac OS X 上使用无提示版本。
  • 在 Chrome 操作系统、Windows 和 Linux 上使用提示字体。

roboto-androidroboto-unhinted 有什么区别?

【问题讨论】:

    标签: android user-interface fonts


    【解决方案1】:

    传统屏幕是低分辨率显示器。

    事实上,分辨率如此之低,以至于仅缩放字体字形在普通文本大小下就会出现可怕的像素化。因此,文本渲染系统不只是缩放文本,它们还会扭曲字形以使它们尽可能匹配像素限制(网格拟合)。

    Microsoft 历来通过字体提示(智能字体 → TTF)实现了这一点:字体文件本身包含关于如何将每个字形形式扭曲为特定大小的说明(代码)。优点是您的文本渲染器不需要非常聪明。缺点是只有花大量时间编写提示规则的字体才能在屏幕上显示良好,而且只有在此人所针对的特定像素密度下(这就是为什么微软试图强迫制造商只生产 96 dpi 屏幕的原因)。

    Apple 选择专注于哑字体(postscript 和 children → CFF 字体),并使用智能渲染引擎(对所有字体应用相同的规则)。

    字体格式现在在 opentype (TTF + OTF) 中合并,但字体仍可以在哑模式(文本渲染器控制失真)智能模式(字体提示控制失真)或两者的混合模式下渲染.

    由于 Linux 被禁止通过合法性访问 windows 字体,但仍托管许多为 TTF 字体编写的应用程序,Linux 文本渲染器能够为未提示的 TTF 字体即时计算合成提示。

    对于智能手机和 hidpi 屏幕等高分辨率显示器而言,网格拟合并不重要。像素在缩放期间的舍入误差足够小,像素对齐不匹配可以忽略不计。

    因此:

    – Android:不需要提示字体,因为它用于高分辨率显示器,并且无论如何可能会自动计算提示,因为它是 Linux 变体

    – Apple:从来没有 TTF 或提示导向,现在使用高分辨率显示器

    – Windows:经常与低分辨率显示器一起使用,许多应用程序仍然使用旧的哑渲染堆栈,如果没有提示,将无法正确匹配网格

    – ChromeOS 和 Linux:可以在低分辨率显示器上使用,可以自动计算提示,不一定需要提示字体,但 Google 可能会花钱请人手动提示字体,因此它认为内置提示更好(提示这些天来处理:使用Linux引擎自动计算提示,然后手动检查它是否运行良好,在需要时更正,将更正的计算添加到字体文件中。最好的自动提示产生干净的形状,但有时扭曲太多意味着字形词干,那是对齐,不再对齐,因为算法将一个形状移动到上部像素线,将下一个形状移动到下部像素线。人类确实更擅长识别和修复这种情况。

    现代字体格式是用于取悦各种软件(通常:微软使用 A、Apple B、OS/2 C 和 Adob​​e D,让我们将 ABC 和 D 放入新格式,这样每个人都高兴. 除了 ABC 和 D 都有各自的缺点,让我们添加 E 更适合下一代软件)。 android 版本比 unhinted 版本要小一些,谷歌可能从这个版本中剥离了所有 Android 不使用的元数据。只要您只在 Android 上使用它,它就可以像未提示的版本一样工作,并且可以节省存储空间。

    【讨论】:

    • 这是迄今为止对提示字体和未提示字体的最佳解释。我试图通过阅读en.wikipedia.org/wiki/Font_hinting 来找出选择/使用哪一个,但很快就迷路了。幸运的是,我找到了这个明确的解释。
    【解决方案2】:

    这是Roboto 文本的问题,您可以阅读它:https://bugs.chromium.org/p/chromium/issues/detail?id=168899

    一些有用的点:

    Windows 上的 Google Chrome 必须使用带有auto-hinting capability 的渲染器,例如FreeType)。 Windows 渲染器无法很好地处理 unhinted 字体,例如 Roboto 当前在 Google Play Store 使用。

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多