二维码的生成细节和原理
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。关于QR Code Specification,可参看这个PDF:http://raidenii.net/files/datasheets/misc/qr_code.pdf
目录
[*]基础知识
[*]定位图案
[*]功能性数据
[*]数据码和纠错码
[*]数据编码
[*]示例一:数字编码
[*]示例二:字符编码
[*]结束符和补齐符
[*]按8bits重排
[*]补齐码(Padding Bytes)
[*]纠错码
[*]最终编码
[*]穿插放置
[*]Remainder Bits
[*]画二维码图
[*]Position Detection Pattern
[*]Alignment Pattern
[*]Timing Pattern
[*]Format Information
[*]Version Information
[*]数据和数据纠错码
[*]掩码图案
基础知识 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。
下面我们看看一个二维码的样例:
Alignment Pattern 然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)
关于Alignment的位置,可以查看QR Code Spec的第81页的Table-E.1的定义表(下表是不完全表格)
Timing Pattern 接下来是Timing Pattern的线(这个不用多说了)
Format Information 再接下来是Formation Information,下图中的蓝色部分。
关于Mask图案如后面的Table 23所示。
Version Information 再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。
掩码图案 这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。(注:选择一个合适的Mask也是有算法的)
关注CoolShell微信公众账号和微信小程序
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)——=== 访问 酷壳404页面 寻找遗失儿童。 ===——相关文章
[*]Cuckoo Filter:设计与实现
[*]谜题的答案和活动的心得体会
[*]【活动】解迷题送礼物
[*]Leetcode 编程训练
[*]排序算法 Sleep Sort
[*]rsync 的核心算法
(68 人打了分,平均分: 4.65 )Loading...
页:
[1]