Skip to content

RGB三通道二维码编码方案设计讨论 #3

@hszcg

Description

@hszcg

@mrroach9 @kaicheng @ccding

基本流程
Image <-> Compressed Image Data <-> String/Number/Byte <-> QR Image

  • 数据压缩或者损失只发生在原始图像压缩(Image <-> Compressed Image Data)这一步
  • QR Image编解码过程是无损,但是它的存储方案决定了我们可以存储多少Compressed Image Data,进而决定了原始图像的压缩比

原始图像的压缩方案,最简单的可以使用JPEG,其次可以使用WebP
JPEG的好处是可以直接用canvas直接压缩,速度快,格式通用

我现在实现的方案,20的JPEG quality,QR version 8, error level M,参考http://www.qrcode.com/en/about/version.html

WebP的好处是直接可以指定压缩比,而且根据评测,同等压缩比的状态下一般视觉效果会比JPEG要好
建议可以先采用JPEG做实验

参考普通二维码的工业标准 http://coolshell.cn/articles/10590.html
二维码可以采用数字、字符和字节编码
字符编码需要先将图像转化为string,对于JPEG格式来说,canvas可以直接支持转化为Base64的String (也就是我现在实现的方案),然后就可以了
数字或者字节编码可以直接按照图像压缩后的数字或者字节来存储,这个相对麻烦一点,要研究如何保存JPEG或者WebP的metadata;但是好处在于压缩比应该会比字符编码效率高一点(参考存储量http://en.wikipedia.org/wiki/QR_code#Storage)

似乎存储能力 iQR Code > microQR Code > QR Code,但是问题是iQR暂时受专利保护,microQR的实现不多
iQR Code http://www.qrcode.com/en/codes/iqr.html#iQrCapacityH2Title
microQR Code http://www.qrcode.com/en/codes/microqr.html

彩色二维码的方案设计
最简单的方法是直接把数据均分成三份,RGB通道各一份来存储
对每一个通道来说,都遵循普通二维码的标准,确保对齐信息重合即可(存储量是原来的三倍)
这部分与采用某一种编码方式(数字、字符和字节)几乎没有依赖,直接实现即可
彩色二维码的编码、解码器也需要我们自己实现,这部分的工作量可能不小

此外,可能还需要考虑加密的方法,这部分我不太了解,待补充

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions