Open hszcg opened 10 years ago
二维码这种色块图,PNG可能压出来更小,且无损。 比如这个issue页面link的二维码,300x300,png用256色palette可以自动认出其实是1bit的颜色,然后压到632 bytes: 而JPEG用20%质量,chroma subsampling开到 4:1:1(这个对单色图影响极小),也要10KB: 相比之下,webp倒是聪明,quality=100的结果是742 bytes,github comment不支持上传webp图片,反正我肉眼看不出跟png有啥差别,JPEG画质弱爆了。
@edwardtoday 额……其实二维码是不需要压缩的……
基本流程是 Image <-> Compressed Image Data <-> String/Number/Byte <-> QR Image
需要压缩的只是原始的图像……
那还是JPEG简单粗暴
那个二维码自己写压缩算法的话是不是只需要 30*30=900 bit=113 byte?
@mrroach9 @kaicheng @ccding
0. 基本流程 Image <-> Compressed Image Data <-> String/Number/Byte <-> QR Image
1. 原始图像的压缩方案,最简单的可以使用JPEG,其次可以使用WebP JPEG的好处是可以直接用canvas直接压缩,速度快,格式通用
WebP的好处是直接可以指定压缩比,而且根据评测,同等压缩比的状态下一般视觉效果会比JPEG要好 建议可以先采用JPEG做实验
2. 参考普通二维码的工业标准 http://coolshell.cn/articles/10590.html 二维码可以采用数字、字符和字节编码 字符编码需要先将图像转化为string,对于JPEG格式来说,canvas可以直接支持转化为Base64的String (也就是我现在实现的方案),然后就可以了 数字或者字节编码可以直接按照图像压缩后的数字或者字节来存储,这个相对麻烦一点,要研究如何保存JPEG或者WebP的metadata;但是好处在于压缩比应该会比字符编码效率高一点(参考存储量http://en.wikipedia.org/wiki/QR_code#Storage)
3. 彩色二维码的方案设计 最简单的方法是直接把数据均分成三份,RGB通道各一份来存储 对每一个通道来说,都遵循普通二维码的标准,确保对齐信息重合即可(存储量是原来的三倍) 这部分与采用某一种编码方式(数字、字符和字节)几乎没有依赖,直接实现即可 彩色二维码的编码、解码器也需要我们自己实现,这部分的工作量可能不小
4. 此外,可能还需要考虑加密的方法,这部分我不太了解,待补充