作者mayuyu (卒业おめでとう!)
看板Browsers
标题[字型] WIN10的浏览器字体渲染
时间Mon Mar 19 16:42:54 2018
由於之前WIN10每次改版都会造成MacType频繁当机,
所以我已经放弃在WIN10使用MacType。
如果你的WIN10版本是1703以上,并且使用解析度2K以上的萤幕,
只要将系统的DPI放大为200%以上,
系统原生的渲染就已经有非常好的效果,不需要再使用MacType。
如果萤幕只有1080,将DPI放大150%,详细阅读并使用下面的方法
https://th0.me/1919.html
https://zhuanlan.zhihu.com/p/26046562
修改系统字型的gasp表来停用字体的Hinting。
准备一支WIN10版本的WinPE,重开机进入WinPE,
将修改好的字型覆盖到系统的字型目录,
替换原本的字型,就可以取得很好的渲染效果。
PS:注意一定要WIN10版本的WinPE,否则会没有权限无法覆盖系统目录。
PS: 不能用右键安装字型的方式覆盖,使用中的系统字型无法用这个方法替换。
PS: 也不能重开机到命令提示字元更换,虽然会显示覆盖OK但其实并没有成功。
PS: 替换後建议到系统字型目录下检查字型的档案日期确定是否有替换成功。
Chrome和Firefox的字体渲染效果并不相同,
可能是为了取得所有装置的输出一致,
Chrome很大幅度的修改了DirectWrite的显示效果
Chrome
https://i.imgur.com/GnxeR2X.png
Firefox
https://i.imgur.com/CTmNGLj.png
上图Chrome无内插补点放大500%(图片放大,非字体放大)
https://i.imgur.com/WmGML8K.png
Firefox放大500% 次像素渲染 放大後会看到边缘的彩色
https://i.imgur.com/LL1Px9S.png
在1080/DPI200%以下的萤幕上,
一般会觉得Firefox的字体渲染效果比较好,
加上预设的Gamma不同,Chrome的字体黑色会比较淡,
所以Cent有修改Gamma,让黑色深一点接近Firefox的表现,
但是整体来说还是Firefox的渲染比较漂亮。
如果还是觉得WIN10渲染的字体太细,
可以用字型原生的Medium取代Regular显示,
例如思源黑体有提供原生的Medium字重,就会比较粗一点。
如果字型没有原生的Medium字重,可以用CSS加粗字体。
CSS加粗字体可以用-webkit-text-stroke或text-shadow
原本
https://i.imgur.com/JXeTqKE.png
-webkit-text-stroke: 0.0150em;
https://i.imgur.com/3LtKlsY.png
text-shadow: 0 0 0.0150em;
https://i.imgur.com/bMo4t9c.png
上图缩小浏览会看不出差异,建议1:1开图比对。
text-shadow会产生字体模糊的副作用,
-webkit-text-stroke则会比较锐利,
但是有二个缺点,一个是反白後反白的效果看不清楚,
另一个是因为系统会对小号的字体作gridfitting的关系,
造成-webkit-text-stroke描边加粗没有描到正确的位置上,
字体的外边会多出一条细线,看起来变成二重分离的边线。
https://i.imgur.com/3CM0IPB.png
第二个问题可以用上面修改gasp表的方法来解决,
停用字体的Hinting後就不会发生二层边线的现象,
但是有些网页使用的WebFont用这方法就改不到了,
不过大部分的显示都没有问题,而且效果锐利很多,
所以我还是尽量用-webkit-text-stroke。
https://i.imgur.com/PCyCqeX.png
要将网页的字型换成自己指定的字型,
例如将Regular全部换成思源黑体Medium,
我是用这个样式
https://userstyles.org/styles/111687/killserif-style
这个样式的好处是只替换指定的字型,而不会全部替换,
避免图示字型、WebFont也被强制替换,避免一些网页显示错误。
不过Chrome在某一次改版後,
@font-face变成只能使用Preferred Family的名称来指定字型,
例如要替换为思源黑体不能写
src: local("Source Han Sans TC Regular");
否则Chrome会找不到字型,必须写成
src: local("Source Han Sans TC");
Chrome才能载入思源黑体。
但是诡异的是,Chrome使用Preferred Family,
却又无法连结同家族的不同的字重,即使指定font-weight: 700;
也无法读取到同一字型的粗体,只能用常规体加粗来显示。
例如下图Yahoo新闻标题的粗体,
将原本网页指定的正黑体用@font-face替换为H明兰,
结果无法读取到粗体,变成用常规体加粗渲染,
可以注意到「坏」这个字,因为直接加粗的缘故,笔画黏在一起难以辨识
https://i.imgur.com/mDLgE8X.png
正常调用到粗体应该显示成这样
可以看到「坏」这个字有合理的笔画空间分配,不会黏在一起
https://i.imgur.com/IN0MEJN.png
解决的方法一
改用这样的写法
*:not([class*="icon"]):not(i) {
font-family: sans-serif !important;
}
将所有的字型替换成指定的无衬线字型。
缺点是部分图示或者WebFont会显示不正确,
需要手动添加到排除名单。
另外有些网站会交叉使用衬线或无衬线字体来做出区别的效果,
例如wiki的条目标题会采用衬线体来显示,
全都替换为无衬线字体的话,这个编排的视觉效果就消失了。
解决的方法二
第二个方法是仍然使用@font-face来替换,
但是指定一个空的字型,或者只有图示的字型来换掉原本的字型,
这样Chrome在这个空的字型中找不到对应的中日韩字符,
最後就会回退至浏览器设定的字型中来寻找,
我们只要在浏览器的设定中指定好想要显示的字型即可。
例如
/* KillSerif FallBack Style */
@font-face {
font-family: "新细明体";
src: local("HoloLens MDL2 Assets");
}
HoloLens MDL2 Assets是WIN10内建的UMP图示,
只有图示的字符,没有中日韩字型,
所以最後会回退至浏览器设定的字型中寻找,
我们只要在Chrome的字型设定中设定好思源黑体,
新细明体就会被空的字型掉包,最後回退至思源黑体来显示。
注意写成这样会没有作用
/* KillSerif FallBack Style */
@font-face {
font-family: "新细明体";
src: local("sans-serif");
}
写成这样也不行
src: local("NullFont");
一定要指定一个本地实际存在,
但又没有中日韩或者任何字符的字型才能回退成功。
回退至浏览器预设的字型就可以正确调用粗体,
也不怕会破坏图示或者WebFont或者衬线字的显示效果。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.219.36.56
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Browsers/M.1521448982.A.511.html
1F:→ labbat: 我放弃mactype了,自订解析度调整到看起来不会疲劳的1280 03/19 16:50
2F:→ labbat: x 720 肉眼最舒适 03/19 16:50
图贴错了重贴
※ 编辑: mayuyu (61.219.36.126), 03/19/2018 16:56:23
3F:推 aiwheat: 官方新版20170628和糖果版的20170628都算蛮定的了, 03/19 20:12
4F:→ aiwheat: 字体大小就要System Font Size Changer 来修改 03/19 20:13
5F:→ aiwheat: 糖果版的是全面渲染,只是没法用外部软体改字体大小 03/19 20:13
7F:推 Shauter: MacType根本是乱吹 最近两台电脑互相测试 发现根本不神 03/19 20:26
8F:推 Shauter: 包括糖果版 用system font size changer 配合像是CENT 03/19 20:28
9F:→ Shauter: 之类的浏览器根本9成就很好了 剩下再自己微调 03/19 20:29
10F:→ mayuyu: 因为之前实在当得太厉害 03/19 20:32
11F:→ mayuyu: 我担心RS4出来以後可能还是会发生相容性问题 03/19 20:32
12F:→ mayuyu: Fx的话我也放弃用MacType渲染 03/19 20:32
13F:→ mayuyu: 因为用Direct2D渲染的速度实在快很多 03/19 20:32
14F:→ mayuyu: 字型去掉Hinting後DW的渲染效果已经很不错 03/19 20:33
15F:→ mayuyu: 如果字体太细 再用CSS稍微加粗一下应该可以接受 03/19 20:33
16F:推 abc0922001: 我是直接用Noto,图示变豆腐字再去加图示用的字体 03/19 21:25
18F:推 hohiyan: 去年秋季的Creators Update好像已经处理hinting的问题了? 03/20 00:27
19F:→ mayuyu: 还是没有 所以我们还是需要手动放大DPI到200% 03/20 01:02
20F:→ mayuyu: 或者修改gasp表 03/20 01:03
21F:→ mayuyu: WIN10 TH2之後有把hinting的门槛降低到22px 03/20 01:03
22F:→ mayuyu: 雅黑正黑UI字号大到22px以上 系统会停用hinting 03/20 01:03
23F:→ mayuyu: 但是系统预设的字号只有9pt@96DPI=12px 03/20 01:03
24F:→ mayuyu: 所以还是惨不忍睹 要放大200%才会到22px以上 03/20 01:03
25F:→ mayuyu: 所以2K以上的萤幕只要DPI200%就可以不用MacType 03/20 01:04
啊 我忘了说 替换完gasp字型後 要记得打开和调整cleartype
WIN10预设已经是开启的 不过可以调整一下如果你觉得太细太淡
在左下的搜寻输入cleartype就可以找到系统的cleartype调整工具
调整的设定会写入到registry 位置在
HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DISPLAY1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Avalon.Graphics\DISPLAY1
调整的每一个步骤对应的机码分别是
第一个步骤 PixelStructure 选择萤幕的像素排列顺序是RGB(1)还是BGR(2)
第二个步骤 GammaLevel 1000/1200/1400/1600/1800/2000
第三个步骤 ClearTypeLevel 0/50/100
第四个步骤 EnhancedContrastLevel 0/50/100/200/300/400
TextContrastLevel 0(选1-2)/1(选3-5)/2(选6)
第五个步骤 GrayscaleEnhancedContrastLevel 0/50/100/200/300/400
也可以用regedit直接改机码再重开机
※ 编辑: mayuyu (61.219.36.101), 03/20/2018 01:30:33
26F:推 aeolus0829: pcman combo 的渲染糊掉了.. 有什麽解法吗 :S 03/20 10:24
27F:→ aeolus0829: 目前 1080p dpi150% 已试过 winfont+64.exe 03/20 10:25
28F:→ aeolus0829: 也调过 cleartype 了 03/20 10:25
29F:推 aeolus0829: 後来装 pcman 0.95 版解决 03/20 10:51
DPI放大後很多传统非DpiAware的GDI程式显示会变得模糊
要在执行档上右键->内容->相容性->覆盖DPI缩放行为 执行者->
1. 应用程式
交给程式本身去处理DPI缩放 也就是不缩放
介面会维持100%原样 显示就不会模糊
也就是原本你在96DPI下不缩放看到的模样
2. 系统
交给系统放大 也就是预设行为 介面放大 但模糊
3. 系统(增强)
1703後才有的新模式 GDI Scaling
概念和MacType Patch作者的WinFont一样
将GDI输出的API转换成DirectWrite处理
非100%DPI时会同时忽略hinting
让传统GDI程式摇身一变变成DW渲染的程式
介面放大 但不会模糊
传统GDI程式可以先试试3. 系统(增强)
如果效果不理想 选1. 应用程式 就可以回到96DPI不缩放的模样
GDI Scaling是神器 所以在1703以後 已经不太需要Mactypec和WinFont了
※ 编辑: mayuyu (61.219.36.71), 03/20/2018 13:42:20
30F:→ mayuyu: 啊 我现在才注意到上面提供的第二个连结有介绍WinFont 03/20 14:17
31F:→ mayuyu: 那是1703之前为了解决传统GDI程式的解法 现在已经不需要了 03/20 14:17
32F:→ mayuyu: 连结的文章作者也建议不要在1703以後全局使用WinFont 03/20 14:18
33F:→ mayuyu: 那样会造成GDI Scaling完全失效 同时可能影响系统稳定性 03/20 14:18
34F:推 Fizban: 沙盒里的程式好像没办法用「右键→相容性」这招 03/20 14:36
35F:→ Fizban: 请问有解法吗? 03/20 14:36
36F:→ mayuyu: 在沙盒里开启档案总管 再从档案总管开启要执行的GDI程式 03/20 16:00
啊 还有 DPI放大125%~175%後 浏览器的介面看起来可能会过大
Firefox可以自订介面大小 在网址列输入 about:config
搜寻 layout.css.devPixelsPerPx
修改为1.0就是100% 如果太小可以改为 1.25/1.35/1.5
Chrome在启动捷径加上
chrome.exe --high-dpi-support=1 --force-device-scale-factor=1.35
※ 编辑: mayuyu (61.219.36.86), 03/20/2018 16:26:47
37F:推 aeolus0829: 唔喔喔喔 这解法完美了!感谢! 03/20 16:29
38F:推 Fizban: 居然没想到,真的是脑筋急转弯。 03/20 16:50
39F:→ Fizban: 谢谢解答 XD 03/20 16:50
40F:推 Shauter: 推系统(增强) 这招很实用 03/20 17:58