Jim的TrueType二维码字体

Hacker News Top 工具

摘要

Jim Paris发布了一款实验性TrueType OpenType字体,该字体使用OpenType塑形和Reed-Solomon编码,将括号分隔的文本渲染为二维码,同时保持周围文本可读。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/07 17:13

jimparis/qr-font

来源:https://github.com/jimparis/qr-font

Jim 的 TrueType QR 码字体

在线演示:https://qr.jim.sh/

下载:

  • qrfont-1L.ttf (https://github.com/jimparis/qr-font/releases/latest/download/qrfont-1L.ttf)(21x21 模块,最多 17 个字符)
  • qrfont-2L.ttf (https://github.com/jimparis/qr-font/releases/latest/download/qrfont-2L.ttf)(25x25 模块,最多 32 个字符)
  • qrfont-3L.ttf (https://github.com/jimparis/qr-font/releases/latest/download/qrfont-3L.ttf)(29x29 模块,最多 53 个字符)

本仓库生成一种实验性的 OpenType 字体,它可以将方括号括起来的文本转换为 QR 码符号,同时保持周围的文本可读。

text abc[hello]ghi

所有字体均使用:

  • 字节模式
  • 可打印 ASCII 输入
  • 固定掩码图案 0
  • [] 作为分隔符

这些字体是自动生成的,而非手工制作。构建脚本会生成字形轮廓和 GSUB 功能逻辑,然后将其编译为 dist/qrfont-*.ttf。默认构建会编译分隔符解析器、字节扩展、Reed-Solomon 校验电路、QR 模块放置和固定掩码渲染。

可打印 ASCII 字形从 Liberation Sans Regular 复制,并按比例缩放到 QR 字体的 em 方块中,因此括号外的 QR 块文本在相同字体中呈现为普通文本。Liberation 是源字体许可证下的保留字体名称,因此生成的字体族命名为 QR Font 1-LQR Font 2-LQR Font 3-L

构建

sh make

该项目使用 uv 进行 Python 依赖管理。你也可以直接运行生成器:

sh uv run tools/build_font.py

默认情况下,生成器从以下路径读取 Liberation Sans Regular:

text /usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf

使用其他兼容的 TrueType 源字体:

sh uv run tools/build_font.py --base-font /path/to/BaseFont-Regular.ttf

尝试完整的生成式 Reed-Solomon 电路:

sh make full-parity

这也是默认的 make 路径。它会生成数千个上下文查找,通常比纯布局构建耗时明显更长。

如需更快的纯布局构建(使用占位零校验):

sh make fast-placeholder

检查形状化的字形流:

sh uv run tools/shape_debug.py '[a]' '[b]'

输出:

  • dist/qrfont-*.ttf(1-L、2-L 和 3-L 字体文件)
  • dist/index.html(交互式网页演示)
  • build/qrfont-*.fea(生成的 OpenType 功能文件)

在浏览器中打开 dist/index.html,输入带方括号的文本,例如 [hello]。混合文本如 abc[def]ghi 应显示为普通文本,然后显示 def 的 QR 码,再继续显示普通文本。

许可证

生成的字体是 Liberation Sans Regular 的修改版本,并遵循 SIL Open Font License 1.1 版许可。请参阅 LICENSE-OFL.txtNOTICE.md

注意事项

这是一个概念验证字体。它依赖于 OpenType 整形,因此需要一个对字体应用 GSUB 功能的环境。QR 块内的输入仅限于可打印 ASCII 字符,根据所选字体版本,最多支持 17、32 或 53 个字符。

相似文章

二维码生成器

Simon Willison's Blog

一款可自定义样式的二维码生成工具,借助Claude构建。支持网址、文本和WiFi网络码。

Libre Barcode Project

Hacker News Top

Libre Barcode Project 提供用于生成 Code 39、Code 128 和 EAN/UPC 格式条形码的开源字体。

关于ASCII艺术与Jgs字体(2023)

Hacker News Top

Adel Faure撰写的一篇文章,介绍ASCII艺术、艺术家Joan G. Stark,以及受其作品启发的字体Jgs font,由Velvetyne发布。

重现 IBM Selectric Composer 字体(2023) --- 在寻找比普通打字机字体更精致的字体时,我发现自己深入研究了 IBM Selectric Composer 的历史——这是一台 20 世纪 60 年代末至 70 年代的排版机器,凭借其精良的字体和比例间距功能,曾广泛用于专业出版领域。 ## 背景 IBM Selectric Composer 是 IBM Selectric 打字机系列的一个特殊变体,专为专业排版而设计。它使用可互换的"字球"(typeball,也称为"golf ball"),能够产生比普通打字机更接近专业印刷品质的输出效果。这台机器支持多种字体和字号,并具备比例间距功能,使其输出的文档看起来更接近专业排版。 ## 字体特点 Selectric Composer 的字体具有以下几个显著特点: - **比例间距**:不同字符占用不同宽度,而非等宽 - **多种字号**:支持从 7 到 12 点不等的字号 - **多种字体风格**:包括衬线体、无衬线体等多种风格 - **专业品质**:输出质量介于普通打字机和专业照相排版之间 ## 数字化复原工作 复原这些字体的过程涉及以下几个步骤: 1. **收集样本**:从历史文档、用户手册和档案资料中收集原始字体样本 2. **扫描与清理**:对样本进行高分辨率扫描,并清理图像中的噪点和瑕疵 3. **矢量化**:将光栅图像转换为矢量轮廓 4. **调整与优化**:对字符进行细致的调整,确保一致性和可用性 5. **添加元数据**:为字体文件添加适当的元数据和字距调整信息 ## 技术挑战 复原过程中遇到了几个主要的技术挑战: - 原始样本质量参差不齐,许多文档经过多次复印,质量有所降低 - 比例间距信息需要从原始文档中重新推算 - 某些字符(尤其是标点符号和特殊字符)的样本极为稀少 - 需要在忠实还原原始设计与提高现代可用性之间取得平衡 ## 成果 经过数月的工作,成功复原了多款 Selectric Composer 字体的数字版本,这些字体现已可供免费下载使用。这些字体为设计师和排版爱好者提供了一种独特的历史风格选择,同时也为保存这段印刷史上的重要遗产做出了贡献。 ## 结语 这个项目不仅是一次技术练习,更是对印刷历史的一次致敬。IBM Selectric Composer 在专业出版领域扮演了重要角色,帮助无数人制作出超越普通打字机水平的专业文档。通过将这些字体数字化,我们得以将这段历史延续下去,让现代设计师也能感受到那个时代独特的排版美学。

Hacker News Top

设计师 Jens Kutilek 记录了复刻 IBM Selectric Composer 字体背后的数学与历史研究,深入探讨了这款标志性 1960 年代打字机所采用的单位间距系统及其工程设计约束。该项目涉及对 IBM 9 单位字形宽度系统的逆向工程——这一系统被 Selectric Composer 的可更换"高尔夫球"字球所采用。