-
Notifications
You must be signed in to change notification settings - Fork 0
Description
基本流程
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通道各一份来存储
对每一个通道来说,都遵循普通二维码的标准,确保对齐信息重合即可(存储量是原来的三倍)
这部分与采用某一种编码方式(数字、字符和字节)几乎没有依赖,直接实现即可
彩色二维码的编码、解码器也需要我们自己实现,这部分的工作量可能不小
此外,可能还需要考虑加密的方法,这部分我不太了解,待补充