笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
在字体中嵌入二维码生成器:Jim's TrueType QR Code Font 技术解析
本文介绍一个实验性项目:通过 OpenType 字体中的 GSUB 特性,将方括号内的文本实时渲染为二维码,同时保留周围普通文本的正常显示。
项目概述
Jim Paris 开发的 qr-font 是一个生成实验性 OpenType 字体的工具。该字体能够将方括号 [...] 包裹的文本自动转换为 QR Code 符号,而括号外的文本正常显示。例如,输入 abc[hello]ghi,字体渲染后会在 abc 和 ghi 之间呈现一个包含 "hello" 信息的二维码。
项目提供三种字体版本,分别对应不同容量的 QR 码:
- qrfont-1L.ttf:21×21 模块,最多 17 个字符
- qrfont-2L.ttf:25×25 模块,最多 32 个字符
- qrfont-3L.ttf:29×29 模块,最多 53 个字符
所有字体均使用:
- 字节模式(Byte mode)编码
- 可打印 ASCII 字符输入
- 固定掩模模式 0(Fixed mask pattern 0)
- 方括号
[和]作为定界符
技术原理:字体如何变成二维码生成器?
不是手写字体,而是程序生成的字形
传统字体是设计师手绘或数字化的字形集合。而 qr-font 的字形完全由构建脚本自动生成。构建流程包括:
- 解析定界符:识别文本中的
[...]区域 - 字节扩展:将输入文本转换为 QR 码所需的字节序列
- 里德-所罗门纠错电路:生成纠错码(Reed-Solomon parity)
- QR 模块布局:将数据与纠错码按 QR 规范排列成矩阵
- 固定掩模渲染:应用掩模模式 0 并输出最终字形轮廓
核心技术:OpenType GSUB 特性
OpenType 字体规范中的 GSUB(Glyph Substitution,字形替换) 表通常用于实现连字、上下文替换等排版功能。例如,fi 连字会将 'f' 和 'i' 两个独立字形替换为一个 'fi' 字形。
qr-font 将这一机制推向了极致:
- 构建脚本生成大量的 上下文查找规则(contextual lookups),这些规则定义了当输入字符序列匹配
[内容]模式时,如何将其替换为预先计算好的 QR 码字形。 - 每个 QR 码版本(1-L、2-L、3-L)对应一组不同的 GSUB 规则。
- 完整的里德-所罗门纠错电路会生成数千条查找规则,这也是完整构建(
make full-parity)耗时较长的原因。
为什么需要 OpenType 整形引擎?
该字体依赖于 OpenType shaping(整形)引擎来应用 GSUB 特性。这意味着:
- 它不能在简单的文本渲染器(如某些终端或图片库)中工作
- 需要支持 OpenType 布局的渲染环境,如:
- 现代浏览器(Chrome、Firefox、Safari)
- LibreOffice、Microsoft Word 等办公软件
- 支持 HarfBuzz 的排版引擎
普通文本的来源:Liberation Sans
字体中可打印 ASCII 字符的字形直接取自 Liberation Sans Regular(一款与 Arial 兼容的自由字体),并按比例缩放到 QR 字体的 em-square 中。因此,方括号外的文本会以 Liberation Sans 的样式正常显示。
由于 Liberation Sans 的许可证(SIL Open Font License)将 "Liberation" 列为保留字体名称,生成的字体家族被命名为 QR Font 1-L、QR Font 2-L、QR Font 3-L。
构建与使用
环境要求
- Python 3.x
uv(Python 包管理工具)- Liberation Sans Regular 字体(通常位于
/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf)
快速构建
bash
make
或直接运行:
bash
uv run tools/build_font.py
自定义基础字体
bash
uv run tools/build_font.py --base-font /path/to/BaseFont-Regular.ttf
构建模式
- 完整纠错构建(默认):
make full-parity,生成包含完整里德-所罗门纠错码的字体,耗时较长 - 快速占位构建:
make fast-placeholder,仅生成布局,纠错码用零填充,适合调试
生成文件
dist/qrfont-*.ttf:三种版本的字体文件dist/index.html:交互式 Web 演示页面build/qrfont-*.fea:生成的 OpenType 特性文件(.fea 格式)
调试工具
bash
uv run tools/shape_debug.py ' [a] ' ' [b] '
该工具可以显示字形替换后的字形流,帮助开发者理解 GSUB 规则的执行结果。
限制与注意事项
- 概念验证性质:这是一个实验性项目,并非生产就绪的解决方案
- 输入限制:QR 块内的输入必须是可打印 ASCII 字符,长度受版本限制(17、32、53)
- 渲染环境依赖:必须使用支持 OpenType shaping 的软件
- 性能考虑:完整纠错构建会生成数千条 GSUB 规则,字体文件较大且构建耗时
背后的技术挑战
里德-所罗门纠错码的字体实现
QR 码使用里德-所罗门码(Reed-Solomon codes)实现纠错。在传统实现中,这是一个数学计算过程。但在字体中实现时,需要将纠错计算转化为字形替换规则——即预先计算所有可能的输入组合对应的纠错码,然后通过 GSUB 规则在渲染时匹配替换。
对于 1-L 版本(最多 17 个字符),可能的输入组合数量巨大,但项目通过限制输入为可打印 ASCII 并固定版本和纠错级别,使预计算成为可能。
掩模模式的固定
QR 码规范定义了 8 种掩模模式(mask patterns),用于优化二维码的可读性。该项目固定使用掩模模式 0,简化了字体生成逻辑。这意味着生成的二维码可能不是最优可读的,但功能完整。
实际应用场景
虽然这是一个实验性项目,但它展示了字体技术的边界:
- 自动生成二维码:在文档或网页中,只需输入带方括号的文本,即可自动生成二维码
- 教育用途:帮助理解 OpenType 特性和 QR 码原理
- 创意排版:为印刷品或电子文档添加动态二维码元素
许可证
生成的字体是 Liberation Sans Regular 的修改版本,遵循 SIL Open Font License 1.1。详见项目中的 LICENSE-OFL.txt 和 NOTICE.md。
总结
Jim's TrueType QR Code Font 是一个极具创意的技术实验,它打破了字体只能显示静态文本的传统认知,将二维码生成逻辑嵌入到字体的 GSUB 特性中。虽然受限于 OpenType shaping 的兼容性和输入长度,但它为字体技术的应用提供了一个全新的视角。对于对字体工程、二维码原理或实验性编程感兴趣的技术人员,这是一个值得深入研究的项目。