KonghaYao / cn-font-split

划时代的字体切割工具,CJK与任何字符!支持 otf、ttf、woff2 字体多线程切割,完美地细颗粒度地进行包大小控制。A revolutionary font subetter that supports CJK and any characters! It enables multi-threaded subset of otf, ttf, and woff2 fonts, allowing for precise control over package size.
https://chinese-font.netlify.app/
Apache License 2.0
496 stars 16 forks source link

Emoji字体分包 #41

Closed ZERO-LJC closed 9 months ago

ZERO-LJC commented 10 months ago

我尝试使用对Emoji字体进行分包

fontSplit({ FontPath: './NotoColorEmoji-Regular.ttf', destFold: './build', chunkSize: 70 * 1024, testHTML: true, reporter: true, previewImage: {}, threads: {}, targetType: 'ttf', css: {}, renameOutputFont: '[hash:10][ext]', });

但是切割出来的字体大小远小于70kb,预览的时候也无法看到对应的emoji,是我使用方式的问题吗,还是不支持分割emoji

KonghaYao commented 10 months ago
image

构建打包应该没有问题,问题出在对字体的解析上了,估计是部分 emoji 引用了特殊的 feature 导致分包失效了,猜测是 liga,不过我们在持续观察中。预览的 html 文件需要开个服务器才能看到,估计你是直接打开了

image
KonghaYao commented 10 months ago
image

这是我直接导入这个包的渲染情况,感觉这个包的特性浏览器没有完全实现好

KonghaYao commented 10 months ago

我研究了一下,原来 emoji 在 unicode 中是多个 数值合一的,所以需要一些特殊手段查看

image
KonghaYao commented 10 months ago

唔,我这边用 cn-font-split 也进行分包测试了一下,渲染效果好像没有什么变化,过几天我写一个视觉测试全面测试一下。 然后,针对于分包 6 MB 过大的情况,看来需要特殊处理一下

KonghaYao commented 10 months ago
image

我对这个 emoji 字体做了一些视觉测试,发现 cn-font-split 的切割是正确的。现在就剩下切割的字符大小的问题了。

ZERO-LJC commented 9 months ago

感谢

image

构建打包应该没有问题,问题出在对字体的解析上了,估计是部分 emoji 引用了特殊的 feature 导致分包失效了,猜测是 liga,不过我们在持续观察中。预览的 html 文件需要开个服务器才能看到,估计你是直接打开了

image

感谢~,但我是本地打出来的文件是这样

image
KonghaYao commented 9 months ago

唔,cn-font-split 版本号是多少 4.11.1 是最新版本,是没有问题的,我的 mac 上没有问题,linux 上可能会有偏差,请给个详细的环境呗

ZERO-LJC commented 9 months ago

我也是4.11.1

image

intel 版本mac

image
KonghaYao commented 9 months ago

node 16 可能会有问题哦,cn-font-split 对 18 一下的版本支持不太好,你可以尝试一下 Github CodeSpace 里面直接试试, 一般 Github CodeSpace 上是能跑的

ZERO-LJC commented 9 months ago
image image

很神奇

KonghaYao commented 9 months ago
image

唔,我线上的 linux 跑的结果也和我本地的差不多,但是你这个确实离谱了。不过你的字体为啥是 24 MB 了呢,我在 noto color emoji 的仓库拿到的是 10 mb 的

ZERO-LJC commented 9 months ago
image

感谢回复~,我本来尝试使用在线分包,但显示这个,不知道是不是bug

KonghaYao commented 9 months ago

看了一下 google 自己线上的实现,感觉 emoji 绑在字体上不太实际,它太多太大了。opentype feature 贼多,导致单包很大,连 google 自己切出来的也是 700kb。因为 emoji 里面很多的换皮肤颜色的代码使得它不好弄,估计最终实现效果还没懒加载的 SVG 强。

image
KonghaYao commented 9 months ago

https://chinese-font.netlify.app/online-split/ 试试这个,那个链接错了

KonghaYao commented 9 months ago

在线版本看起来也没毛病,不会是 intel 内核的问题吧 😂

image
ZERO-LJC commented 9 months ago

https://fonts.google.com/noto/specimen/Noto+Color+Emoji 我用的是这个24MB

KonghaYao commented 9 months ago
image

这个包切割的大小就和 google 差不多了,没有我的那个那么大

ZERO-LJC commented 9 months ago

是的,我刚刚跑完在线分包,这个包切到最后就只有2.17MB了,这是不是不合理

image
KonghaYao commented 9 months ago

这个我也不清楚,但是 我看google 线上的加起来也就 几 MB,估计这个24 MB 是设计版,没有压缩过。另外,我用的是 https://github.com/googlefonts/noto-emoji

KonghaYao commented 9 months ago

https://github.com/googlefonts/emoji-metadata 这里有 emoji 的源数据,里面有触发的 unicode

KonghaYao commented 9 months ago

6, Google 有个 COLRv1 的字体,可以减小到 4 MB 左右。

image
KonghaYao commented 9 months ago

可惜兼容性不咋地

image