• 欢迎光临~

字体渲染优化技术

开发技术 开发技术 2022-12-18 次浏览

摘选自Linux字体美化实战(Fontconfig配置) [金步国] (jinbuguo.com)

渲染阶段的核心目标是:让字体中的每一个字符,都以其最佳效果在屏幕上显示出来。

字体渲染三板斧

改善矢量字体的显示效果,最重要的是下面三种技术:

  • 抗锯齿(antialias)
  • 微调(hinting)
  • 亚像素渲染[仅适用于LCD显示屏]

抗锯齿(antialias)是一个改善字体显示效果的利器。抗锯齿算法不是本文的重点,想了解详细信息可以google之。站在使用者的立场,我们只需要知道,开启它可以大幅度的改善字体显示效果,并且没有什么不良影响。甚至在苹果的 Mac OS X 和 iOS 上,已经抛弃了字体微调技术(hinting),而完全依赖于抗锯齿技术来改善字体的显示效果。

微调(hinting)分为两种:内嵌微调与自动微调。内嵌微调是字体设计者耗费大量的时间和精力、精心制作的、内嵌在字体文件中的额外指令,本质上是人工微调;而自动微调(autohint)是FreeType内嵌的一套微调算法,通用于所有矢量字体,本质上是机器微调。一般说来,内嵌微调比自动微调的显示效果更佳。与微调相关的属性有三个:

hinting

微调功能的总开关,一旦关闭便彻底禁用微调(包括内嵌微调与自动微调)。

autohint

是否优先使用自动微调。设为"true"表示只使用自动微调,不使用内嵌微调;设为"false"表示优先使用内嵌微调,但对于没有内嵌微调的字体仍会使用自动微调。

hintstyle

微调的程度(同时作用于内嵌微调与自动微调):(1)"hintnone"表示禁用微调(包括自动微调与内嵌微调),通常用于字号非常小的场合;(2)"hintslight"表示优先保持字符的形态,但是可能会降低笔画的锐利度,通常更适合于自动微调以及小字号下的内嵌微调;(3)"hintmedium"表示在字符形态与笔画锐利度之间进行折中,但实际效果通常相当于"hintfull";(4)"hintfull"表示优先提高笔画的锐利度,但是可能破坏字符的形态,通常更适合于内嵌微调;[注意]这里对微调风格的解释仅是一个提示,切勿教条化,对于特定的字体、特定的字号,哪种微调风格的效果最佳,最可靠的途径是通过自己的眼睛去亲自查看与对比。此外,还由于每个人的口味不同,风格有所偏向,特别是对于"hintslight"与"hintfull",不同的人可能会有相反的喜好。

亚像素渲染是一个针对LCD显示屏的技术(切勿用于CRT显示屏),与微软的ClearType技术同属一类。其基本原理是,将显示器的R,G,B各个次像素也分别进行控制,让其进行微妙的调整,相当于提升了分辨率,从而显示出更细腻平滑的笔画。与亚像素渲染相关的属性有两个:

rgba

LCD子像素的排列顺序,不同的LCD排列顺序未必相同,可能的取值如下:(1)"unknown"表示未知;(2)横向(水平)"Red Green Blue"顺序,这是最常见的排列顺序;(3)横向(水平)"Blue Green Red"顺序;(4)纵向(垂直)"Red Green Blue"顺序,例如把显示器垂直放置的时候;(5)纵向(垂直)"Blue Green Red"顺序;(6)"none"无子像素(例如传统的CRT显示器),其实就是关闭亚像素渲染。

lcdfilter

LCD filter 的风格:(1)"lcdnone"表示彻底关闭 LCD filter,不推荐,因为它会导致笔画边缘出现彩色边纹;(2)"lcddefault"表示最大限度的消除彩色边纹,但是可能会增加笔画的模糊程度。多数场合这是最佳选择;(3)"lcdlight"表示减轻笔画的模糊程度,但不能最大限度的消除彩色边纹。少数场合也许效果更好;(4)"lcdlegacy"是为了与传统的"libXft color filter"兼容而设置,未来会被删除;

程序员灯塔
转载请注明原文链接:字体渲染优化技术
喜欢 (0)