KonghaYao/cn-font-split

Rustchinese-font.netlify.app

划时代的字体切割工具,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.

converterfontfont-subsetfont-subsetteropentype-fontsotfperformancettfwasmwoff2browserdeno
Star Growth
Stars
1.2k
Forks
48
Weekly Growth
+1
Issues
21
5001k
Aug 2022Dec 2023Apr 2025Sep 2026
Artifactscrates.io
README

中文 Web Font 切割工具 7.0 —— Rust Speed

中文网字计划

NPM License NPM License NPM License author updateTime

中文网字计划 Github 在线使用

简介

cn-font-split中文网字计划 所使用的字体分包工具,通过高性能的各种技术将庞大的字体包拆分为适合网络分发的版本。经过七个大版本的字体研究与代码迭代,这项技术在我们的网站中得到了充分的应用,实现了中文字体在 Web 领域的加载速度与效率的双飞跃。

cn-font-split 不仅支持中文,针对于中韩日文字、少数民族文字、阿拉伯文等皆有优化,可以根据实际字体包内字符进行智能地分包。

  • 🚀 WebAssembly 或者 Rust FFI 实现, 原生运行分包,进入秒级构建;
  • 💻 坚持 Web 平台为基底,兼容性极强。浏览器、WASI、Linux、MacOS、Windows,统统可以运行。Rust、JS、Python 多语言复用。
  • 📦 跨平台产物一致,无论哪个平台,运行 cn-font-split 得到的结果都是一致的。
  • 🔧 功能齐全完备,支持生成文字图片预览,支持完整全字符,支持复杂字形,支持可变字体!
  • ⛰️ 自研 Rust 工具,构建文本 SVG 引擎,独立渲染文本图像。
  • 🚄 我们有前端编译器插件啦! —— vite-plugin-font, 支持 Vite、Nuxt、Next、Webpack、Rspack,快速嵌入你的前端工具链。

欢迎提交 PR 和 Issue,12/7 解决你的问题。

使用文档指引

如果您想要支持某些语言,欢迎提交 Issues 或者 PR。

新版本功能

  1. ✅ 🚀 原生构建支持,速度进入秒级时代(2MB 字体只需要 50ms)!
  2. ✅ 🔒 完备测试与版本发布流程!
  3. ✅ 📦 更加拟人的源代码,维护难度直线下降!
  4. ✅ 🔒 依赖检查与重构,安全版本。
  5. ✅ 📦 更加可控的分包方式,支持细颗粒度的字符拆分。
  6. ✅ 🔔 支持 OTF 格式字体打包,支持复杂字形渲染。
  7. ✅ 🏞️ 字体预览图生成
  8. ✅ ⌨️ 支持 Nodejs、Deno、Bun、Browser,跨平台随处可使用、构建产物一致!
  9. ✅ 🥳 不止中文,只要是包内的字符,统统分包
  10. ✅ 🏞️ 支持自动识别可变字体字重
  11. Opentype Feature 支持情况 支持 95 | 部分支持 9| 等待测试 20

感谢

  1. 项目核心插件为 Harfbuzz,为我们提供了专业级的字体子集化和字体绘制功能。我们采用了 Rust 版本的 harfbuzz_rs_now 来嵌入 Rust 代码生态,实现了非常理想的字体子集化效果。
  2. Rust opentype 项目提供了无与伦比的字体信息抽取能力,为字体特性和分包算法提供了强健的基础。
  3. Rust Cross 项目提供了强大的 Rust 跨平台产物构建能力。
  4. 特别感谢 —— 通义千问 和 GPT-4o 为 Rust 重构过程提供的诸多信息提示和代码帮助, 主项目能够在 20 天内完成 Rust 化,离不开大模型的辅助。
  5. 特别感谢 —— Claude3.5 为我们完善了大部分的测试用例。

旧版本曾经使用过的项目

  1. 6.0 版本中,opentype.js 是这个项目为第二解析引擎,主要处理 feature 关系判断和文本转化为 SVG 的任务,在渲染方面给我们的支持很多。
  2. 6.0 版本中,@napi-rs/ttf2woff2 使得 Nodejs 平台和 Bun 平台可以以极快的原生速度压缩字体文件,效率极高,速度极快。
  3. 6.0 版本中,wawoff2 项目将 Google 的 woff2 格式转换功能代码编译成为了 wasm,为我们的字体压缩提供了非常简便的 API。但是 wawoff2 项目的导出方式为 js 嵌入 wasm,极大影响了 js 打包和使用,故项目也重新构建并发布出适合的版本。
  4. 6.0 版本中,多线程采用了 workerpool 的解决方案,多线程的加持下,速度快了非常多。

开源许可证

Apache-2.0

Related repositories
jgm/pandoc

Universal markup converter

HaskellcliGNU General Public License v2.0pandochaskell
pandoc.org
46.2k4k
CorentinTh/it-tools

Collection of handy online tools for developers, with great UX.

VueGNU General Public License v3.0vuejstools
it-tools.tech
40.5k5.4k
RVC-Project/Retrieval-based-Voice-Conversion-WebUI

Easily train a good VC model with voice data <= 10 mins!

PythonPyPIappMIT Licensechangesovits
38.2k5.3k
fanmingming/live

✯ 可直连访问的电视/广播图标库与相关工具项目 ✯ 🔕 永久免费 直连访问 完整开源 不断完善的台标 支持IPv4/IPv6双栈访问 🔕

JavaScriptnpmGNU General Public License v3.0radioiptv
live.fanmingming.com
28.4k4.2k
C4illin/ConvertX

💾 Self-hosted online file converter. Supports 1000+ formats ⚙️

TypeScriptnpmGNU Affero General Public License v3.0bunelysia
18.9k1.1k
showdownjs/showdown

A bidirectional Markdown to HTML to Markdown converter written in Javascript

JavaScriptnpmlibraryMIT Licenseshowdownjavascript
14.9k1.6k
RelaxedJS/ReLaXed

Create PDF documents using web technologies

JavaScriptnpmISC Licensepdf-documentpug
11.8k421
studyzy/imewlconverter

”深蓝词库转换“ 一款开源免费的输入法词库转换程序

C#appGNU General Public License v3.0imec-sharp
10.3k708
iib0011/omni-tools

Self-hosted collection of powerful web-based tools for everyday tasks. No ads, no tracking, just fast, accessible utilities right from your browser!

TypeScriptnpmMIT Licensereacttools
omnitools.app
10.2k713
Kozea/WeasyPrint

The awesome document factory

PythonPyPIBSD 3-Clause "New" or "Revised" Licensepythoncss
weasyprint.org
9.6k874
sindresorhus/Gifski

🌈 Convert videos to high-quality GIFs on your Mac

SwiftappMIT Licensegifskigif
sindresorhus.com/gifski
8.5k321
nikolaeu/numi

Beautiful calculator app for macOS, Linux & Windows

JavaScriptnpmcliMIT Licensecalculatornumi
numi.app
6.5k255