Linux 字体显示为什么不像 Android 一样清晰?

Linux 字体显示为什么不像 Android 一样清晰?

先说答案:Linux 桌面的矢量字体渲染技术不行,电脑屏幕不行,开源矢量字体设计不行。

补充一句:其实早期 Android 手机屏幕分辨率和像素密度双低的时代,字体显示比电脑还糊。我曾经用过华为 C8500 和 HTC G8 Wildfire,两台机器都是 2.8 寸 QVGA 屏,字体糊得瞎眼。以下两幅图片是华为 C8500 的主界面和应用抽屉,大家可以看看上古时代的 Android 机字体显示有多模糊。

图片来源:https://tech.sina.cn/mobile/pc/2011-06-09/detail-ianfzhne6978815.d.html

图片来源:https://tech.sina.cn/mobile/pc/2011-06-09/detail-ianfzhne6978815.d.html

我在 Linux 桌面上,已经放弃了优化渲染的努力,而是改用点阵字体了。我电脑屏幕分辨率是 1080p,像素密度是 96 dpi。操作系统是 Ubuntu Server 20.04 LTS,桌面是 LXDE,X 窗口管理器是 X11。我无论怎么调节渲染,Linux 桌面 UI 的中文矢量字体都是模模糊糊的,当然,英文矢量字体还算清晰。

作为从 DOS/Win9x 时代过来的人,我还是喜欢点阵字体。它干脆利落、毫不拖泥带水,非常适合低分辨率(1080p 以下,下同)、低像素密度(96 dpi 及以下,下同)的屏幕。所以,我干脆全盘换用点阵字体:Unifont 和 文泉驿点阵宋。

下面两张截屏是换用点阵字体前后的对比。

默认字体 + 默认字号 + 默认字体平滑,文字糊得一批

点阵字体 + 12 pt 字号 + 关掉 Linux 桌面的字体平滑,文字十分清楚

什么方法能让字体清晰显示?

现在主流字体是矢量字体。矢量字体显示的清晰程度,主要取决于三个要素:操作系统对矢量字体的渲染技术,屏幕的像素密度,字体的设计。

因此,要让矢量字体在屏幕上清晰地显示,要求字符的框架清楚,笔画的边缘不模糊,有三种主要的方法:

一是软件方法(渲染技术)

调节字体的渲染,尤其是次像素渲染,从而让矢量字体在屏幕上显示更清晰。XP 时代,微软独门绝技 ClearType 借助次像素强化字体的描边,适合低分辨率(1080p 以下,下同)、低像素密度(96 dpi 及以下,下同)的屏幕。XP 时代后期异军突起的 MacType 则是借助 GDI 极大地加强次像素渲染,显示效果更胜 ClearType 一筹。但是,Linux 主流 GUI 桌面的字体渲染技术,调节很复杂,功能很局限。我受够了不想再调了。

二是硬件方法(屏幕像素)

大力出奇迹,暴力堆像素,无脑增加像素密度。苹果 iPhone 一般是 300 dpi 起步,安卓手机一般是 400 dpi 起步。台式机显示器一般是 93—185 dpi。字体渲染技术不够?没关系,屏幕像素密度高了,字体自然就清晰了。但是,电脑屏幕限制,导致它真的没法像手机那样追求极限。

不过有个好消息。据我观察,电脑屏幕达到 163 dpi(相当于 27 寸 4K 分辨率)左右,字体就很清晰了,运行 Windows、macOS、Linux 的效果都不错。

三是魔改字体(针对屏幕显示优化)

1990—2000 年代,微软最喜欢魔改字体了,针对屏幕显示来刻意设计字体。

魔改主要有两种手段:

  • 嵌入点阵法。给同一个 TTF 字体文件同时配备点阵字库和矢量字库。在低像素密度的屏幕上,小字号用点阵字库显示,大字号用矢量字库显示。毕竟,点阵字体在低分辨率、低像素密度的屏幕上,比矢量字体清晰得多。
  • 强化描边法。强化矢量字库的描边(Kerning),翻译成人话就是故意把字体中每个字模的轮廓设计得粗一点,这样就适合低分辨率、低像素密度屏幕显示。再结合 ClearType 之类的渲染技术,更是锦上添花。

早期微软 Windows 内置的西文 TTF 字体,例如经典的 Arial、Courier New、Verdana、Tahoma(它是 Windows 2000 的默认 UI 字体,也是 XP 经典主题的默认 UI 字体)、Times New Roman、Trebuchet MS 等,同时使用了上述两种手段。

至于 Windows 内置的中文字体,宋体(中易宋体)和细明体使用了嵌入点阵法,微软雅黑和微软正黑使用了强化描边法。从 Windows 9x 时代过来的人都知道,当初 8 pt 的宋体显示极为扭曲,而 8 pt 的细明体显示锐利清晰,是因为宋体的开发者中易中标没有做 8 pt 的点阵字库,而细明体的开发商华康科技(现名威锋数位)做了 8 pt 的点阵字库。这也导致微软在 Windows 2000/XP 中人为把 8 pt 的西文字体回落到 9 pt 的宋体,确保在 UI 默认字号为 8 pt 的 Windows 环境中清晰地显示宋体汉字。

但是,在今天,这两种手段都不好用。据我所知,用嵌入点阵法制作的字体,逐步被各大 Linux 发行版淘汰了,用户无法启用点阵,而且,没有哪个中文字体的描边(Kerning)比微软雅黑更黑更粗。假如你不在乎微软雅黑是闭源商业字体,那么在 Linux 中安装微软雅黑自用,不失为一种临时的解决办法。

让 Linux 字体显示更清晰的解决办法

一是调渲染

既然屏幕像素密度有限,而且开源中文字体的描边太糟糕,那么调节字体渲染参数就失去了意义。

二是换屏幕

更换像素密度更高的屏幕。这是最根本的解决办法。台式机最好换成 27 寸 4K 显示器。笔记本倒是基本不用操心,如今的笔记本屏幕像素密度不算太低。换屏幕后,记得在 Linux 桌面中开启高分屏支持, 据我所知,Kali 和 Ubuntu 20+ 的默认桌面 Gnome 均具有此功能。

三是换字体

如果不能换屏幕,就换个字体吧。点阵字体最适合低分辨率、低像素密度屏幕。我现在用两款开源点阵字体:文泉驿点阵宋、Unifont。

如果 Linux 桌面支持 PCF 或 BDF 格式的纯点阵字体,就用文泉驿点阵宋,这个字体相当美观,而且是国产字体。

如果 Linux 桌面不支持这两种纯点阵字体,那就用 Unifont,这个字体有 TTF 版,是用矢量字体模拟点阵字体,只要不开启字体平滑,它就清晰美观。此外,也可以用微软雅黑。

我同时使用两者。桌面和应用程序的 UI 字体用 Unifont,Firefox 浏览网页的中文字体用文泉驿点阵宋。

更换字体后的桌面截图

更换点阵字体的操作

此处以 Ubuntu Server 20.06 为例,桌面是 LXDE,窗口管理器是 X11。

Step 1. 安装 Unifont 和文泉驿点阵宋。

1
sudo apt install *unifont xfonts-wqy

Step 2. 解除 Ubuntu 对纯点阵字体的限制。其他发行版可能也有类似的限制,请读者自行解决。

1
2
sudo unlink /etc/fonts/conf.d/70-no-bitmaps.conf
sudo dpkg-reconfigure fontconfig

Step 3. 把桌面的默认 UI 字体设置为 Unifont,字号设置为 12 pt,并关闭字体平滑。Unifont 是假点阵字体,即伪装成点阵字体形式的矢量字体,12 pt 最清晰,但是,如果不关闭字体平滑,它就会边缘模糊。LXDE 的设置方法如图所示。其他桌面系统的设置,请读者自行完成。

设置默认 UI 字体:
设置默认 UI 字体

关闭字体平滑:
关闭字体平滑

Step 4. 把 Firefox 浏览网页使用的默认简中字体设置为文泉驿点阵宋(此处显示其英文名称:WenQuanYi Bitmap Song)。之所以这样设置,是因为我想让 Firefox 只渲染西文,不渲染中文。如果不让 Firefox 渲染西文,那么西文的显示效果特别粗糙难看。而文泉驿点阵宋是打包成 PCF 或者 BDF 格式的纯点阵字体,Firefox 的字体平滑对它不起作用。

在 Firefox 中使用文泉驿点阵宋

Firefox 渲染中英文对比

图片版权

题图:自制

头图:https://pixabay.com/zh/photos/pond-cherry-trees-dusk-6648129/


求扫码打赏
“我这么可爱,请给我钱 o(*^ω^*)o”

Linux 字体显示为什么不像 Android 一样清晰?
https://blog.kukmoon.com/ced5cadc5ac3/
作者
Kukmoon谷月
发布于
2024年4月6日
许可协议