我不确定您能否实现这一目标,因为 QR 码可以保存的信息量非常有限。
首先,您可能希望将图像存储为原始字节,因为其他格式(数字和字母数字)旨在保存文本/数字,并提供更少的空间来存储您的图像。假设您选择最大可能的 QR 码(版本 40),具有最小的纠错级别,最多可容纳 2953 字节的二进制信息(见此处)。
第一个选项,正如您所建议的,您将图像存储为位图。这种格式根本不允许压缩,并且需要(在没有 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代码(不要忘记我们在开始时将其纠错级别设置为低!)。
尽管这不是一个好消息,但我希望这对您有所帮助!