【问题标题】:Storing a BMP image in a QR code将 BMP 图像存储在 QR 码中
【发布时间】:2012-10-15 23:33:36
【问题描述】:

我正在尝试创建(或者,如果我在研究中以某种方式错过了它,请找到)一种将 bmp 图像编码/解码为 QR 码格式的算法。我一直在使用指南 (Thonky) 来尝试了解 QR 码的基础知识,但我仍然不确定如何解决这个问题,具体来说:

  • 我应该将数据编码为二进制还是数字更合理(假设每个像素的最大值为 255)?

  • 我搜索了有关 QR 码的结构化附加功能的信息,但除了 QR 码支持这一事实之外,没有找到更多详细信息 - 我该如何实现/利用此功能?

当然,如果有任何提示/建议可以更好地将图像存储为二进制数据,我非常愿意接受建议!

感谢您的宝贵时间,

肖恩

【问题讨论】:

  • 我想问你是否真的想这样做。几乎所有阅读器都不支持结构化附加,实际上大多数设备都无法读取最大尺寸的 QR 码。对图像的简单超链接进行编码。

标签: qr-code bmp data-storage


【解决方案1】:

我不确定你能否做到这一点,因为 QR 码可以保存的信息量非常有限。

首先,您可能希望将图像存储为原始字节,因为其他格式(数字和字母数字)旨在保存文本/数字,并提供更少的空间来存储您的图像。假设您选择最大可能的 QR 码(版本 40),具有最小的纠错级别,最多可容纳 2953 字节的二进制信息(see here)

按照您的建议,第一个选项是将图像存储为位图。这种格式根本不允许压缩,并且需要(在没有 Alpha 通道的 RGB 图像的情况下)每个像素 3 个字节。如果我们考虑文件头大小(14 到 54 字节),并忽略填充(每行图像数据必须填充到 4 的倍数),那么您可以存储大约 2900/3 = 966像素。如果我们考虑一个正方形的图像,这表示一个 31x31 的位图,即使是缩略图图像也很小(例如,本文末尾的我的头像是 32x32 像素)。

第二个选项,您使用 JPEG 对图像进行编码。这种格式的优点是使用可以减小文件大小的压缩算法。这次没有精确的公式来获得适合 2.9kB 的图像大小,但我尝试使用一些方形图像并缩小它们的大小,直到它们适合这个大小,保持良好的 (93) 质量因子:这给出了一个平均值大约 60x60 像素的图像。 (在如此小的图像上,通常不会看到 jpeg 和 bmp 之间令人难以置信的压缩系数,因为 jpeg 文件中的文件头远大于 bmp 文件:大约 500 字节)。这比位图好,但仍然很小。

最后,即使你在这个二维码中成功编码了你的图像,你也会遇到另一个问题:这么大的二维码很难成功扫描。事实上,这个二维码的大小为 177x177 模块(“模块”是一个白色或黑色的小方块)。假设您使用提供所谓“高清”帧(1280x720 像素)的智能手机对其进行扫描,则每个模块在帧上的最大尺寸约为 4 像素。如果考虑到相机噪声、锯齿和由于用户在扫描时从未完全空闲而导致的模糊,输入帧的质量将使任何 QR 码解码算法都很难成功获取 QR代码(别忘了我们一开始就把它的纠错级别设置为低!)。

虽然不是什么好消息,但希望对你有所帮助!

【讨论】:

  • MBrenon,非常感谢您的回复。我没有意识到我将使用多少尺寸限制——我想我在可扫描性方面还有一些工作要做(我没有使用智能手机,所以最大的问题是输入帧质量到正在使用的介质)与存储的数据量。考虑到这一点,我似乎仍然无法找到有关 QR 码结构化附加功能的任何信息——您是否有任何资源可以解释如何将 QR 码“链接”在一起?再次感谢您的意见,它绝对可以帮助我理解我面临的问题! -肖恩
【解决方案2】:

确实有一种方法可以对多个(最多 16 个)二维码的信息进行编码,使用二维码中称为“结构化附加”的特殊标头。您可以使用的最佳信息来源是关于 QR 码的规范 (ISO 18004:2006);可以(但不一定容易)在网络上免费找到它。

该规范的相关部分(第 9 节)说:

“最多可以以结构化格式附加 16 个 QR 码符号。如果符号是结构化附加消息的一部分,则由前三个符号字符位置的标题块指示。 结构化附加模式指示符 0011 放置在第一个符号字符的四个最高有效位位置。 紧随其后的是两个结构化附加码字,分布在第一个符号字符的四个最低有效位、第二个符号字符和第三个符号字符的四个最高有效位上。第一个码字是符号序列指示符。第二个码字是奇偶校验数据,并且在消息中的所有符号中都是相同的,从而可以验证读取的所有符号是否构成同一结构化附加消息的一部分。此标头后紧跟从第一个模式指示符开始的符号的数据代码字。”

不过,我不确定大多数 QR 码扫描仪是否可以处理这个问题,因为它是一项非常先进的功能。

【讨论】:

    【解决方案3】:

    您可以定义一个固定的图像大小、减少 jpg 标题部分并仅使用有关它的重要信息,因此您可以节省多达 480 字节的 ~500 字节的普通标题。

    我是用这种方法来存储小俱乐部身份证的人物照片,大约64x64像素的图像就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 2019-12-03
      相关资源
      最近更新 更多