ttf 字体的一点问题
💡
原文中文,约2000字,阅读约需5分钟。
📝
内容提要
作者发现渲染汉字时的高度问题与字体文件中的ascent和descent值有关,阿里巴巴普惠体不遵守一致性。作者修改了引擎代码解决问题,并验证了字体bug猜想。
🎯
关键要点
- 引擎渲染的汉字高度低于标称像素高度,存在70+像素的问题。
- stb truetype库提供了两个计算字模大小的API,作者建议使用stbtt_ScaleForPixelHeight()。
- 字体文件中有两处描述ascent和descent值,分别在hhea表和OS/2表中。
- 微软设计的OS/2表与Apple的hhea表存在冗余信息,可能与其代码实现风格有关。
- 大部分字体的ascent和descent值在两张表中一致,但阿里巴巴普惠体不遵守这一点。
- 阿里巴巴普惠体在hhea表和OS/2表中的ascent和descent值不同,导致计算缩放比时出现问题。
- stbtt_ScaleForMappingEmToPixels()能得到预期值,因为它使用head表中的unitsPerEm字段。
- 作者怀疑字体数据填写错误可能与默认屏幕dpi有关,认为这是字体本身的bug。
- 在Windows系统中安装字体后,发现其表现与引擎中的渲染相似,且在某些浏览器中选择框大小异常。
➡️