同屏幕下对比, windows 的字体渲染确实比 macos 差很多

239 天前
 studyingss

有一个很流行的说法“macos 字体好看,是因为 macos 只支持自家硬件,而 apple 的屏幕分辨率都很高,几千的电脑不能和起步上万的电脑比很正常,你把 win 的预算加到 macos 的级别字体自然就一样了。”

比方说这个帖子,下面的回复基本都是说“分辨率不足” https://www.v2ex.com/t/973728

之前一直对这种说法深信不疑,毕竟一分钱一分货的关键深入人心,5000 的笔记本就不去跟 16000 的 mbp 比了。

直到朋友施舍了块 4k 显示器,把 win 和 mac 分别接上去,才发现即便是同一块屏幕,什么都不调默认设置下。mac 的字体就是比 win 好看。

个人觉得最难受的就是 win 的字体的横线上下那条虚边,看着太难受了,跟眼花似的。

如果单纯的调高缩放,win 的字体观感和 mac 差不多的等级,显示内容已经和笔记本的小屏幕一样少了。

简单查了下,貌似是两个系统对字体渲染的理念不同导致的。

https://www.joelonsoftware.com/2007/06/12/font-smoothing-anti-aliasing-and-sub-pixel-rendering/

https://www.zhihu.com/question/336295967

8619 次点击
所在节点    Windows
64 条回复
EVANGELIONAir
239 天前
@kokutou stylus 扩展,不过 6 月份 manifest v3 出来后 chrome 系所有浏览器就不可能了,早日 firefox
Socrazy
239 天前
Windows 的垃圾雅黑+垃圾渲染,没救了。
agagega
239 天前
试着截了个图,同样是 Firefox ,同一个帖子,同样是苹方字体,系统同样 200%缩放(浏览器缩放不一样)

macOS
https://imgur.com/VAa1rTa.png

KDE
https://imgur.com/9Ql1nJX.png

Windows
https://imgur.com/6zEtJ2G.png

确实是更喜欢 macOS 这种偏糊的处理,Windows 比 Linux 好在不用和各种 fontconfig 斗智斗勇,但很多地方默认雅黑改不了,太丑了。macOS 上像 Emacs 这类对中文字体支持不太好的软件其实也容易翻车。
fansttty
239 天前
这个是绝大部分人都认同的,极少数不是个人审美问题就是硬犟。我也是同一款 4k 显示器,Win 即使换字体、DSR 超分成 5k 再 200%缩放、Mactype 等一系列优化,依然和 Mac 有差距,最要命的是 Win 下的宋体,很多软件字体族会会退到宋体,在 4k 下更是灾难体验。
agagega
239 天前
@agagega
显示器都是 LG ultrafine 4K
EVANGELIONAir
239 天前
@agagega 这个图已经非常明显说明问题了,mac 和 kde 都是优先边缘描绘,windows 优先清晰显示。
dbliu
239 天前
@rimwindy NVIDIA DSR 修改了配置, 提升到了 5K 的分辨率, 显示的效果视觉感觉是提升了 。 多谢
wangritian
239 天前
我是 4k 200% 两台设备偶尔切着用 mac 真的糊 字体难看 系统也用不惯
hello2090
239 天前
mac 得用 27 寸 5k ,等效 2k 就是完美的。27 寸 4k 显示器 mac 下除非你等效 1080 ,那字就那么大一个个。其他任何缩放,win 都比 mac 好,Intellij 打开看看就行了。

要是 mac 连 27 寸 4k 能有 win 的效果,我就不用买 studio display 了😄
fatigue
239 天前
不过我觉得 windows terminal 里的字体是所有终端里看着最舒服的
huijiewei
239 天前
1366x768 才是王道

高了就是 Win 叛
moudy
239 天前
虚线那是 serif 字体的问题。vscode 在 win 和 mac 下观感其实是差不多的。都是 sans serif 字体
ShadowPower
239 天前
也许是微软保留了各种曾经出现过的 API ,不少软件底层代码历史悠久能用就不改,所以整体看起来比较差。

比如获取系统默认字体就有一套 API 能拿到宋体,一套能拿到微软雅黑……

Windows 里面也有字体渲染看起来比较好的东西。

在 Windows 版 IDEA 里,把抗锯齿改成灰度,字体不用微软雅黑,看起来就挺好的。

Windows 10 的开始菜单界面字体效果也还可以。

Windows Terminal 不显示微软雅黑字体的时候也不错。
james122333
239 天前
@agagega

fontconfig 还好吧

配置一下就好 有很多设置是不一定需要的

例如以下
/etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<match target="font">
<edit name="autohint" mode="prepend" binding="strong">
<bool>true</bool>
</edit>
<edit name="antialias" mode="prepend" binding="strong">
<bool>true</bool>
</edit>
<edit name="hinting" mode="prepend" binding="strong">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="prepend" binding="strong">
<int>3</int>
</edit>
<edit name="lcdfilter" mode="prepend" binding="strong">
<int>1</int>
</edit>
<edit name="rgba" mode="prepend" binding="strong">
<const>rgb</const>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>sans</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>WenQuanYi Micro Hei</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>WenQuanYi Micro Hei</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>WenQuanYi Micro Hei</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>WenQuanYi Micro Hei Mono</string>
</edit>
</match>
</fontconfig>

基本上所有桌面环境的字体预设值就是以上 完全不用动 改 DE 字体大小和以上设置即可
james122333
239 天前
@agagega

字型名称用 fc-list 命令就可以显示
james122333
239 天前
@agagega

fontconfig 还可以设置 dpi 自行研究吧
zq11211277
239 天前
@rimwindy #8 这个 body { text-shadow: 0px 0px 0.3px #ACACAC; } 真的好用 感谢
secondwtq
239 天前
@james122333 他说的是不用折腾。
这也是 macOS 和 Windows 的问题——没有给出选择。HiDPI 下还不太明显,老设备下就各有各的问题了。

之前 OS X 的 System Preferences 里面有个 “Use LCD font smoothing when available”的选项,应该是影响是否使用 subpixel rendering ,打开之后会显著增强视觉字重,对就很类似 #23 那种胖了一圈的感觉。根据网上说法,macOS 后来不知道在什么版本里面,把 subpixel rendering 整个砍了,这个选项也没了,但是 defaults 里面还在,效果变成了让字体自动加粗一圈,但是这是两年前的说法,新版可能又不一样了,反正我复现不出来。
但是 anyway ,两个系统的 hinting 都是不给调的。

你给的这个配置 hinting 看上去直接满了,应该是更偏向 Windows 那种的。虽然我记得 KDE 好像默认就是这个风格,不过本贴里大部分人估计不怎么喜欢。不过问题就是,你不让用户配置就有一半用户不喜欢,你让用户配置用户就嫌麻烦。
而且我这 Qt 和 GTK3/4 程序的字体渲染好像有明显的不一致,这个倒是更加严重的问题 ...
Tumblr
239 天前
我有个 1920*1080 的屏。。。
kuanat
239 天前
字体渲染这个话题一两句话说不清楚,我自己的笔记大概有五六千字,如果有空闲我会考虑专门发个帖子。

这里回复主要是想表达一个观点:苹果的渲染效果是可以在 Linux 环境近似复制的。

我这里举两个例子,需要配合 #23 @agagega 的截图对比来看。

由于我这里没有苹方字体,不过看过效果之后就知道不影响了。我这里的环境是 Gnome+Firefox 200% 缩放。

第一张是我日常的效果


第二张是贴近苹果的效果(通过调整参数还可以更像)




----------手动分割线----------

Windows 那个就不做对比了,我说下 #23 macOS/KDE 和我这里的区别。

首先忽略标题里粗体,那个是字重的关系,其次忽略英文和数字,因为它们 fallback 到了不同的字体上。

如果你把图片保存下来放大看,那么你会发现,KDE 的字体渲染是有彩色边缘的,说明它使用了 subpixel 抗锯齿。而 macOS 实际上是用的 grayscale 抗锯齿。

接下来关注标题下面“XX 小时 XX 分钟”的那个“时”字,苹果系统那个“时”和日常里写法是不太一致的,右边“寸”的横非常靠下,而 KDE 版本就比较正常。这是因为 macOS 的渲染引擎会无视 hinting ,而 KDE 依赖的底层 FreeType 在 KDE 的默认值是 Slight Hinting ,当苹方字体本身没有 hinting 信息时,会按照算法在垂直方向上做自动 hinting 修正。

所以 Linux 环境里,如果通过配置 fontconfig ,设置 hinting=false hintstyle=hintnone ,基本上可以获得接近 90% 的苹果效果。也就是我这里图一的例子。

如果仔细看还是会发现,苹果的渲染标题下面“XX 小时 XX 分钟前”里面的汉字,明显要颜色偏深一些。实际上,如果设置了暗色模式,这个差别会更明显。

这里涉及到一个叫 stem darkening 的概念,在“正确”渲染的前提下,额外对灰度进行加深,以匹配人类视觉的非线性感知。

所谓“正确”是指,通过 alpha composing 将字符前景与背景合成,这个计算是在线性空间里完成,然后通过 gamma 矫正转换到输出空间。这个过程在 Win/macOS 上都是默认支持的,然而 Linux 缺少 gamma 矫正这一步。

可以通过 FreeType 的参数来强行启用 stem darkening ,就如我第二张图的效果。实际效果是轻微的加粗,对于灰度显示的部分影响比较明显。只是从“反映字体设计意图”的角度上说,这个渲染逻辑是不正确的。但考虑到追求渲染效果往往是因为设备 DPI 不够,所以正确与否反倒不那么重要了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX