QH7B 发表于 2025-12-29 11:32:29

请问如何批量查找受 HB_SUBSET_FLAGS_NO_HINTING 影响的字体

如题,目前已知 FA 丸ゴシックM 和 標楷體 存在此问题,想知道是否还有其他字体有相同的问题,以便我使用单独编译的工具进行子集化,避免出现文字显示问题。

milkfans 发表于 2025-12-30 21:48:59


中日字体基本都有hinting,受影响字符多少的问题,hb-info.exe --show-technology fontfile可以看有没有hinting看了下原码就是判断字体是否包含
fpgm或prep或cvt子表,有其中任意子表就表示字体有hinting   

hb-subset的默认设置不是不开--no-hinting吗 ,用默认就好了啊
它默认子集化应该就是只保留必要的hinting
测试以下字体在不同字形范围内子集化后的大小,单位KB

       字型gid范围
字体1-1001-100(nohinting)1-10001-1000(nohinting)**(nohinting)
FA 丸ゴシックM46916512550462686
標楷體19920015228392239
方正准圆_GBK121214914897699649

看结果默认子集化应该也是只保留相关的hinting
像方正准圆_GBK这种hinting用的少的字体,开启nohinting并不会减少多少体积像標楷體和FA 丸ゴシックM这种hinting用的多的开启nohinting会导致显示不正常,

QH7B 发表于 2025-12-30 22:46:39

milkfans 发表于 2025-12-30 21:48
中日字体基本都有hinting,受影响字符多少的问题,hb-info.exe --show-technology fontfile可以看有没有hi ...

感谢回复!
那就是说子集化时如果加了这个FLAG,多数字体都会出现显示问题,只是大部分的不明显很难发现是吗?
但是 mkvtool 的作者说这样会显著降低子集化后字体文件的体积,而只有极个别的字体会出现显示问题,所以拒绝去掉这个FLAG。
目前我一直是原版和自己编译的版本换着用,那按照你的说法以后我只用自己编译的去掉这个FLAG的版本就可以了是吗?


milkfans 发表于 2025-12-31 00:50:11

QH7B 发表于 2025-12-30 22:46
感谢回复!
那就是说子集化时如果加了这个FLAG,多数字体都会出现显示问题,只是大部分的不明显很难发现 ...


我没研究过harfbuzz subset的源码,单从测试的结果来看,我觉得默认开这个没什么道理,官方的默认设置也是不开启
harfbuzz github上release有提供windows下subset编译的二进制文件 harfbuzz ,你可以自己测试下不同字体的开启nohinting这个开关对结果的影响
测试下来大部分字体开启nohinting可能最终体积会小个几KB到几十KB,例如180KB和220KB看起来最终体积差的很多,但相较原字体几MB的体积来说,这点优化可能都不到原字体体积的1%,我自己的结论不开nohinting保证兼容性更重要



op200 发表于 2025-12-31 01:37:14

hb 和 fonttools 的 subset 都是默认保留 hinting,那些天天接触字体的开发者写的默认选项肯定是有道理的(
页: [1]
查看完整版本: 请问如何批量查找受 HB_SUBSET_FLAGS_NO_HINTING 影响的字体