kekee000 / fonteditor-core

fonteditor core functions
MIT License
355 stars 66 forks source link

部分 otf 字体的 advanceWidth 值读取错误,造成文字间距错乱字符堆叠 #46

Open dancancer opened 3 years ago

dancancer commented 3 years ago

部分 otf 字体的 advanceWidth 值读取错误,造成文字间距错乱字符堆叠,仅影响部分 otf 字体的非中文字符

与 opentype.js 对比排查后发现,如下部分代码逻辑中在部分 otf 字体场景下 nominalWidthX 值获取有误,导致最终对应字形的 advanceWidth 有误

https://github.com/kekee000/fonteditor-core/blob/9e43033ac2586bc3249a8b695132f4d3a084823e/src/ttf/table/CFF.js#L160

排查过程中还发现该处代码中 item.advanceWidth 值正常 glyf[i].advanceWidth 值有误,简单修改设置优先取 item.advanceWidth 是否可行?

https://github.com/kekee000/fonteditor-core/blob/9e43033ac2586bc3249a8b695132f4d3a084823e/src/ttf/otfreader.js#L110

以下截图为问题具体现象,上图为完整字体中 a 字形的相关参数,下图为截取后的字体。注意对比 advanceWidth 值

kekee000 commented 3 years ago

得研究一下,otf 相关解析是照搬 opentype.js 的,可能需要做一些修正,能帮忙给有问题的字体和字符么。

gongpeione commented 2 years ago

同有这个问题,请问现在这个有解法么?