文章摘要
该项目生成一种实验性OpenType字体,可将方括号内的文本转换为二维码符号,同时保持周围文本可读。字体支持字节模式、可打印ASCII输入和固定掩码模式,使用Liberation Sans Regular作为基础字体。
文章总结
Jim的TrueType二维码字体项目
在线演示:https://qr.jim.sh/
下载链接: - qrfont-1L.ttf(21×21模块,最多17个字符) - qrfont-2L.ttf(25×25模块,最多32个字符) - qrfont-3L.ttf(29×29模块,最多53个字符)
该项目生成一种实验性OpenType字体,能将方括号内的文本转换为二维码符号,同时保持周围文本正常显示。例如输入"abc[hello]ghi",方括号内的"hello"会生成二维码。
所有字体均采用以下规范: - 字节模式 - 可打印ASCII输入 - 固定掩码模式0 - 使用[和]作为分隔符
字体通过脚本自动生成而非手工制作。构建脚本会生成字形轮廓和GSUB功能逻辑,然后编译为dist/qrfont-*.ttf文件。默认构建包含分隔符解析、字节扩展、里德-所罗门奇偶校验电路、二维码模块布局和固定掩码渲染。
可打印ASCII字形从Liberation Sans Regular字体复制并缩放到二维码字体的em方格中,因此方括号外的文本会以普通字体样式显示。根据源字体许可协议,Liberation为保留字体名称,故生成的字体家族分别命名为QR Font 1-L、QR Font 2-L和QR Font 3-L。
构建方法: - 运行make命令 - 项目使用uv管理Python依赖,也可直接运行:uv run tools/build_font.py - 默认读取/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf作为基础字体 - 可通过--base-font参数指定其他兼容TrueType字体源
构建选项: - make full-parity:完整生成里德-所罗门电路(默认路径,需较长时间) - make fast-placeholder:快速布局构建(使用占位零奇偶校验)
调试工具: - uv run tools/shape_debug.py ' [a] ' ' [b] ' 可检查字形流
输出文件: - dist/qrfont-.ttf(三种尺寸的字体文件) - dist/index.html(交互式网页演示) - build/qrfont-.fea(生成的OpenType功能文件)
使用方式:在浏览器中打开dist/index.html,输入方括号文本如[hello],混合文本如abc[def]ghi会显示为普通文本+def的二维码+普通文本。
许可协议:生成的字体是Liberation Sans Regular的修改版本,遵循SIL Open Font License 1.1版。详见LICENSE-OFL.txt和NOTICE.md文件。
注意事项:这是一个概念验证字体,依赖OpenType整形功能,因此需要支持GSUB特性的环境。二维码块内的输入限制为可打印ASCII字符,根据字体版本不同,最多支持17、32或53个字符。
评论总结
根据评论内容,总结如下:
主要观点与论据:
技术实现令人印象深刻,但存在兼容性问题
- 多位用户指出在Safari(iOS)上,空格会导致QR码生成失败。
- 引用:
- "It doesn’t seem to like spaces that much, the code for [QR coded] is broken for me on safari ios." (shreddit)
- "Spaces are definitely broken in Safari." (LoganDark)
创意与实用性评价两极
- 部分用户赞赏其利用字体生成QR码的巧妙性,但认为日常使用不实用。
- 引用:
- "Maybe it's not practical for day-to-day use but the way this hacks the font to produce something completely different is amazing!" (athenot)
- "Font rendering should scare you" (trillic)
功能与文档缺失
- 用户指出缺少完整解释(如实现原理、字体能力),且仅支持Basic Latin(英文)。
- 引用:
- "Unfortunately the most important thing here is missing - the whole explanation..." (zb3)
- "Great idea, but it's a shame that it only supports Basic Latin (English-only)." (andonumb)
意外优势:文本可复制
- 用户发现生成的QR码可作为文本选中并复制,还原原始内容。
- 引用:
- "A fun benefit seems to be that you can select the QR code as text and copy it..." (jhogervorst)
平衡性说明:
评论整体呈现“创意认可但技术缺陷明显”的基调,正面评价集中于技术巧思,负面评价聚焦于兼容性、功能局限和文档缺失。