二维码中的蛇

2020-09-04 23:53:06

上述二维码包含一个完整的Windows可执行文件,可在Windows7及更高版本上运行。它是Snake的一个简单但完全可玩的实现。

二维码和其他任何介质一样,是一种数据存储介质,虽然它几乎总是用来存储ASCII文本,但它也可以用来存储二进制数据。因此,理论上几乎任何计算机数据都可以存储在二维码中,前提是它可以在大小限制内容纳。

二维码有各种标准大小,最大的是版本40,它可以存储多达2953字节(约2.9KB)的二进制数据。上面的代码并不是很大,它只存储了大约1.4KB的数据(使用Crinkler从3.2KB缩减到略大于视频中显示的可执行文件,因为我决定增加一点功能)。

您可以将此二维码视为现实世界中的二维码,方法是使用计算机的网络摄像头读取它(例如,在将此页面加载到手机上或将二维码打印出来之后)。为此,我推荐使用zbarcam。我提供了一个下载链接,其中包含您需要的一切:

使用手机屏幕或打印输出,将二维码举到相机上。

一旦它识别了代码,它就会关闭,Snake将出现,刚刚从二维码中读取。

此方法与上面的方法相同,但是,如果您宁愿手动输入命令,而不是运行我的脚本,请执行以下操作:

使用手机屏幕或打印输出,将二维码举到相机上。

一旦它识别出代码,它将关闭,名为";snake.exe";的可执行文件将出现在同一文件夹中。

上面提供的zbarcam版本已打补丁,可以在Windows上正确输出二进制数据。此项目暴露了zbarcam中的一个错误,其中二进制数据被错误地视为文本,在Windows尝试将LF行尾转换为CRLF时无意中损坏了它。这里使用的补丁已经合并到Zbar的主源代码中,但截至2020年7月,还没有稳定的发布版本包含该补丁。

上面提供的zbarcam版本已编译为支持DirectShow,以便更好地与网络摄像头设备兼容。在我的视频中,我使用了一个没有为DirectShow编译的版本(改为使用VFW),它导致了一个黑白的网络摄像头提要。此构建提供彩色提要。

作为概念验证,我用JavaScript编写了一个Snake的实现,缩小后也可以容纳我在视频中简要展示的最大二维码大小。有些人对玩这个很感兴趣,所以可以在这里买到。