手绘二维码:极客精神遇上文具艺术
Python核心开发者Seth Larson在他的个人博客上分享了一次有趣的实验——用手工绘制的方式制作二维码。他在明尼阿波利斯一家文具店购买了一种带有10×10网格和2×10网格的便利贴式便签纸,立刻想到了一个创意:在纸上手绘一个二维码。
最小的标准二维码(第一版)使用21×21像素的矩阵。这意味着他需要将方格对半分并使用部分边距来容纳。第一版二维码在最低数据质量设置下可以容纳最多17个字节的URL。问题来了:他的个人网站"https://sethmlarson.dev"长达23个字节,超出了限制。于是他改用"sethmlarson.dev",这样大多数扫码器会将其视为搜索词从而导向他的网站。不过一位热心读者在文章发布后指出,使用全大写字母"HTTPS://SETHMLARSON.DEV"就可以将完整域名装入第一版二维码中——因为QR码的字母数字字符集实际上包含URL专用符号如冒号和斜杠。
Seth使用Python的qrcode包生成参考图案,然后开始手工绘制。他先画出三个角上的定位图案(position patterns),然后逐步填充其他像素,一边画一边尝试扫描。当他画出左上角和左下角定位图案之间的时序线后,扫码器开始"想要"从他的绘画中识别出什么。随着顶部时序线和数据的加入,扫码器终于将整个方块识别为二维码。值得注意的是,即使他在数据区域犯了一个小错误,在最低纠错级别下这也无关紧要。最终成品扫描时有些挑剔,因为纸质对比度较低,但终究成功识别。
📎 原文:Hand Drawn QR Codes