Chromium 事实上不是完全真的集成,而是套两个壳,依然依赖原生 FreeType 和 fontconfig 的基础库。而 FreeType 的很多特性全被它自己的 Skia 隔开失效,然后 Skia 和假 FreeType 壳之间互通…… 这点上不光 Linux 这样,全平台系统都这样。这也是为什么 macOS 上的 Chromium* 字体渲染会比系统原生和 Firefox ,Safari 要不一样——渲染上会淡很多,因为 Skia 把 CoreText 里涉及预设 smoothing 渲染那块全隔开,用一种自己的逻辑去重新实现(虽然 smoothing 三档命令依然对其有效,但效果和原生明显区别)。
但更要命的是它在 Linux 上还集成进了 fontconfig 壳,导致直接不卵你系统自己的 fontconfig 任何字体规则…… Freetype/fontconfig 在一次大更后都将 autohint 作为全局默认。而 Chromium 一集成后,auothint 就变成任何扣肉系的处女铁锁了,再也解不开…… 甚至在 Android 系统上都如此。
我当时不死心,想窥探它对系统底层库依赖的逻辑到底是怎样的。我把 FreeType 源码里涉及 CJK 的 autohint 代码全删掉,CJK 的 autohint 彻底失效。但在 Chromium 上,除非你字体全局设置 CJK 是第一位,或网页排版的编码默认是 CJK 第一排,只要是 Latin 在前通过 fallback 到 CJK ,CJK 字体依然给你 autohint…… 我彻底傻眼了…… 再也不想碰任何扣肉了……
可怎么可能,现在的扣肉真是做到了你不关心扣肉,扣肉也会处处来关心你,塞你一嘴…… 任何多平台都会自觉的塞个 Electron 强奸你…… 就连 Qt 的 QtWebEngine 都是纯而又纯的扣肉了…… 真不知道以后还会集成什么,Firefox 是否也会步后尘……
但更要命的是它在 Linux 上还集成进了 fontconfig 壳,导致直接不卵你系统自己的 fontconfig 任何字体规则…… Freetype/fontconfig 在一次大更后都将 autohint 作为全局默认。而 Chromium 一集成后,auothint 就变成任何扣肉系的处女铁锁了,再也解不开…… 甚至在 Android 系统上都如此。
我当时不死心,想窥探它对系统底层库依赖的逻辑到底是怎样的。我把 FreeType 源码里涉及 CJK 的 autohint 代码全删掉,CJK 的 autohint 彻底失效。但在 Chromium 上,除非你字体全局设置 CJK 是第一位,或网页排版的编码默认是 CJK 第一排,只要是 Latin 在前通过 fallback 到 CJK ,CJK 字体依然给你 autohint…… 我彻底傻眼了…… 再也不想碰任何扣肉了……
可怎么可能,现在的扣肉真是做到了你不关心扣肉,扣肉也会处处来关心你,塞你一嘴…… 任何多平台都会自觉的塞个 Electron 强奸你…… 就连 Qt 的 QtWebEngine 都是纯而又纯的扣肉了…… 真不知道以后还会集成什么,Firefox 是否也会步后尘……