• 字体
  • 字体家族
  • 字体公司
  • 字体设计师
  • 字体样张
  • 资讯
  • 帮助
字客网>资讯>详情

对比 iOS 系统 Android 的字体渲染有何区别?

时间:2015-09-19 17:53:40| 业界|浏览:510|来源:知乎|作者:寞沫
导语罗永浩在其锤子第一次发布会上说,比起 iPhone,Android 机上的字体太模糊。Android 字体渲染过程,相比苹果有何不

罗永浩在其锤子第一次发布会上说,比起 iPhone,Android 机上的字体太模糊。Android 字体渲染过程,相比苹果有何不同?是否可以通过调整渲染顺序,从而让字体清晰?

最近强迫症爆发,又开始折腾 Android 的字体了,但是最后仍旧以失败告终,于是来吐吐槽。

和 iOS 相比,Android 的“字体系统”最大的一个缺点其实是缺字。昨天看到一个微博,正好体现了 iOS 在 Android 字符数面前的优越感。(由于我找不到原文字,所以没法拿来在自己的手机和电脑上测试。)

虽然自 Android 2.3 至今,Google 在这方面做了很多努力,增加了阿拉伯语、希伯来语和一些印度语言的高质量字体(我没有具体研究过,如有错误请指正),但是就我们最常用的汉字而言,还是缺字的。

我国对于非嵌入式系统的强制标准 GB18030-2000 包括了全部 Unicode 3.0 的汉字,而这其中包括了“最初统一的汉字”和扩展 A 区(Ext-A)汉字。然而 Droid Sans Fallback(Android 默认中文字体)的早期版本对此支持不完善,甚至有部分字出错。某一版的 Droid Sans Fallback 加入了对 CJK Ext-A 区内的汉字支持,但是这个字体却分裂为了 DroidSansFallback.ttf 和 DroidSansFallbackFull.ttf,其中前者有谚文(韩文字母),没有 Ext-A 汉字,后者有 Ext-A 汉字却没有谚文。这是为什么呢?我猜是因为该字体的字符数量接近了 ttf 字体的上限(65536个)。Droid Sans Fallback 包含基本汉字、假名、谚文及一部分扩展拉丁及符号已超过 51000 字符。(这是由于该字体使用拼接技术保存了大量的汉字共用部件,而这些部件也是计入字符数内的,并不是按码位算。)为了再塞进这近 7000 汉字,不得已一分为二。不过也有说法这么做是为了减少体积,因为 Ext-A 毕竟不常用。而 Ext-B、Ext-C、Ext-D 的汉字要想支持只有加字体一种方法(字符数超出)。

貌似跑题了,其实不然。拼接技术也让这款字体只可远观,正因为此我才想为 Android 换一款高质量的中文字体。大家都觉得冬青黑体逼格高,MIUI 的兰亭黑也不错,可是它们的实际效果如何呢?

注意“驱”和“的”

在手机的荧幕上一像素和两像素的差别很明显

为什么这些字的笔画粗细不均?我不是 Android 开发者,不了解具体情况,但我猜是因为 Android 强制开启了自动 Hinting。之前我怀疑 Android 也使用 Freetype,也许可以像桌面 Linux 那样调教一发,但是我杯具地发现根本就没有类似于配置文件的东西,说不定这些配置已经固化于字节码中了。

而这种奇怪的自动 Hinting 居然也在 Roboto(尽管 Roboto 已经内置 Hinting 信息)和 Droid Sans Fallback里面出现……

注意“a”“t”较粗(在实机上很明显)

注意“4”“软件”“安”较粗

最要命的是,这个问题还不一定每次都会出现,不知是随机出现还是间歇出现,但这都是逼死强迫症的节奏啊!!

而且这都是在分辨率高于 300PPI 的手机上截的图啊,谁说高分屏就能掩饰住渲染引擎的渣了?!

此外,Android 的字体回调(fallback)机制也很诡异。如果在 fallback_fonts.xml 里 Droid Sans Fallback 之上加入一个中文字体的话,那么恭喜,韩文无法显示了。而我用的冬青黑体其实是 XHei WinPhone,这个字体以符号全面著称,但是显示不了这两个颜文字:( ゚ Д゚) Σ(゚Д゚)。这是因为,这两个颜文字的眼睛是半角日文半浊音符号,而 XHei 系列字体没有覆盖这部分字符。

但是 Droid Sans Fallback 有啊,你为什么不去调用啊!!!!

还有更诡异的事情发生了,我用 fontforge 把半角假名加入 XHei 后,颜文字依然无法正常显示,甚至连全角字符都有问题了。

_(:3”∠)_ 累了,感觉不会再爱了……

值得一提的是,Android 对组合字符的支持也不好。

作者:@豆腐君

更多观点:@王燕然

android采用了linux的freetype字体库和chrome的2d图形渲染引擎skia来显示字体,这样的选择是为了兼顾清晰和美观,毕竟android手机从高端到低端,ppi差别很大,不可能像ios一样只追求美观,不需要考虑低ppi下字体显示是否清晰(低分辨率显示器显示mac上的字体就不如windows清晰,高分辨率下mac字体更美观)。android的droid sanf设计时要考虑低ppi下小字号的清晰度和高ppi下大字号的美观。

锤子系统通过更换字体可以部分解决高ppi下字体显示效果问题,却没办法根本解决字体库和字体渲染问题,如果有能耐把ios的mactype移植到android才真牛逼,毕竟换字体在任何root了的手机上都轻而易举。

原生android系统要适用高中低所有android手机,字体设计必须考虑兼容性,不考虑这个大前提而贬低android的字体显示效果无异是耍流氓。

@贾一博

通常来说,我们不能确切的知道 iOS 和 Android 字体渲染有何不同。因为 Android 的代码我们能看到,但是 iOS 的代码我们看不到。所以只能把问题分解为两个部分。

1. Android 字体渲染是什么样子的?

2. 关于 iOS 字体渲染有哪些推测?

那么 Android 字体渲染是什么样子的呢。

目前 KitKat 用的是 FreeType 2.4.12,并且关闭了之前旧的 CFF 引擎,也就是用的 Adobe 贡献的新 CFF 引擎。其他的 FreeType 2 众多的配置 Android 完全没有动,只是裁剪掉了很多用不上的字体渲染引擎。

Layout Engine 非常之简陋,只是算了经过 harfbuzz_ng 处理过的字符串长度进行了简单的换行处理。不能进行图文混排,以及字符串内不同 Style 的处理。也就是同一个字符串(没有 fallback 到不同字体的情况下)必须是同一种字体、字重和颜色等。

原文:知乎

0
  • 关注字客网公众号领取Z码
  • 关注字体先森公众号抽取SVIP
相关字体公司
对比 iOS 系统 Android 的字体渲染有何区别? 网友点评
游客:文明上网,理性发言。 看不清?换一张
对比 iOS 系统 Android 的字体渲染有何区别? 最新评论
暂无相关评论