qr-code – 在QR码中存储BMP图像

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

>我应该将数据编码为二进制还是数字更合理(假设每个像素的最大值为255)?
>我已经搜索了有关二维码的结构化附加功能的信息,但除了二维码支持的事实之外还没有找到太多细节 – 我如何实现/利用这一功能?

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

谢谢你的时间,

肖恩

我不确定你是否能够实现这一点,因为QR码可以容纳的信息量非常有限.

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

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

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

最后,即使您成功地在此QR码中对图像进行编码,您也会遇到另一个问题:这个大的QR码非常非常难以成功扫描.事实上,这个QR码将具有177×177模块的大小(“模块”是小的白色或黑色方块).假设您使用提供所谓“HD”帧(1280×720像素)的智能手机进行扫描,每个模块的最大尺寸约为4像素.如果您考虑到相机噪声,由于用户在扫描时永远不会完全闲置而导致的混叠和模糊,输入帧的质量将使任何QR码解码算法成功获取QR非常困难代码(不要忘记我们在此开始时将其错误修正级别设置为低!).

虽然这不是一个好消息,但我希望这会对你有所帮助!

相关文章
相关标签/搜索