手绘 QR 码

查看原文 HN 讨论

文章摘要

作者 Seth Larson 入手了一本带方格的便利贴本,灵机一动决定亲手在纸上绘制一个能扫的 QR 码。他选了规格最小的 Version 1(21×21 像素),打算编码自己的域名 sethmlarson.dev(23 字节)。后来一位读者提醒他,QR 码的 “alphanumeric” 字符集其实包含 : / 等 URL 常用符号——前提是全部字母用大写——于是完整的 HTTPS://SETHMLARSON.DEV 也能塞进 Version 1。生成参考图用的是 Python 的 qrcode 包:echo -n "HTTPS://SETHMLARSON.DEV" | qr --error-correction=L

由于 Version 1 共 21×21 格、而便利贴本格子较大,他把每个方格对半分来匹配像素分辨率。他先画三个角落的定位图案(position pattern),再补上水平和垂直的时序线(timing line),最后以增量方式把数据模块涂满,每涂一段就用手机扫一次看是否能识别。最低的 L 级纠错足够包容他偶尔涂错或线条不齐的瑕疵。

最终成品确实能扫——但作者发现一个有趣的物理细节:贴在显示器上时识别得很顺利,平铺在桌面上时由于便利贴会卷边,反而要按平才能扫到。他在文末附上了一段 TIL:用全大写编码 URL 是把数据塞进最小尺寸 QR 码(也是把更多数据塞进最大尺寸 QR 码)的实用技巧。

HN 评论精华

  1. p0se1d0n:呼应了正文里的”全大写技巧”。alphanumeric 字符集允许 : / - . 等符号但要求字母大写,是制作超小型 QR 码的常用招数,也能在最大尺寸下塞下更多内容,是值得收藏的小窍门。

  2. larsbrinkhoff:晒出自己在白板上手绘 QR 码的成品(链接),并感叹”比想象中费劲得多”——再次印证了 21×21 这种小尺寸看起来简单,画起来却很考验耐心。

  3. scraft:提供了一个反例——某餐厅把 QR 码刻在木板上再上墨,他试了 4 块只扫出来 1 块,跳转到的还是大量差评的点评页(吐槽点之一就是”码扫不出来”)。说明手工 QR 码在真实生意场景里成功率堪忧。

  4. sssilver:提到 Meshtag 这类替代方案:图案本身不编码 URL,只指向服务器上的一条记录,因此画得歪一点也能解析。代价是一旦服务关闭,所有标签全部失效——典型的便利与中心化风险权衡。

  5. pimlottc:表示自己原本期待作者会完全靠手算完成数据编码、纠错码计算和掩码选择,而不是用 Python 生成参考图照抄。纯手算 QR 码会是另一个量级的体力活。

  6. jiehong:分享了浪漫用法——他给朋友寄过一封手写信,附带把同样内容编码的手绘 QR 码。对收信人而言新奇,对写信人而言累;好处之一是替代潦草的手写体,方便阅读。

  7. zf00002:提了一个有趣的现象——很多商品(如车库门遥控器、SwitchBot 配件)上印着 QR 码,扫了却什么都没指向。猜测是产线上的标签遗留或被废弃的功能入口。

  8. xeckr:回忆 2013/2014 年高三物理课无聊时就在方格本上手描 QR 码消磨时间——可见这种”打发时间型”玩法早有同好。