您的位置  > 互联网

QR(Quick-)CODE码符号探测图形分隔符、定位图形

上图是二维码的基本结构,其中:

位置检测图形、位置检测图形分隔符、定位图形:用于定位二维码。 对于每个二维码,位置是固定的,但尺寸和规格会有所不同;

校正图形:规格确定后,校正图形的数量和位置也确定;

格式信息:表示QR码的纠错级别,分为L、M、Q、H;

版本信息:即二维码的规格。 QR码符号有40种矩阵规格(通常为黑白),从21×21(版本1)到177×177(版本40)。 每个版本的符号都比前一个版本大。 第一个版本每侧添加 4 个模块。

数据和纠错码字:实际保存的二维码信息,以及纠错码字(用于纠正因二维码损坏而导致的错误)。

简要编码流程:

1、数据分析:确定编码字符类型,并根据对应的字符集转换为符号字符; 选择纠错级别。 在一定规格下,纠错级别越高,实际数据容量越小。

2、数据编码:将数据字符转换为比特流,每8位一个码字,整体形成数据码字序列。 事实上,知道了这个数据码字序列就意味着知道了二维码的数据内容。

数据可以按照更有效解码的模式进行编码,例如:数据:编码(版本 1-H),

1)集团:012 345 67

2)转换为二进制:012→

345→

67 →

3)转换为序列:

4)将字符数转换为二进制:8→

5)添加模式指示(上图中的数字)0001:000

对于字母、中文、日文等,只是分组方法、模式等内容不同,基本方法是一样的

3、纠错编码:将上述码字序列根据需要分为块,根据纠错级别和块码字生成纠错码字,并将纠错码字添加到数据码字序列的后面,成为新的序列。

当QR码的规格和纠错级别确定后,其能够容纳的码字总数和纠错码字总数也就确定了。 例如:版本10,当纠错级别为H时,总共可容纳346个,其中224个纠错码字。

也就是说,QR码区域中大约有1/3的码字是冗余的。 对于这224个纠错码字,可以纠正112个替换错误(如黑白反转)或224个数据读取错误(无法读取或解码),

该纠错能力为:112/346=32.4%

4、构造最终的数据信息:在规范确定的条件下,将上面生成的序列按顺序放入块中。

将数据按照规定分成块,然后对每个块进行计算,得到对应的纠错码字块。 将纠错码字块按顺序组成序列并添加到原始数据码字序列的末尾。

如:D1、D12、D23、D35、D2、D13、D24、D36、……D11、D22、D33、D45、D34、D46、E1、E23、E45、E67、E2、E24、E46、E68……

5.构建矩阵:将检测图案、分隔符、定位图案、校正图案和码字模块放入矩阵中。

将以上完整序列填入相应规格的二维码矩阵区域。

6、遮蔽:对符号的编码区域使用遮蔽图形,使二维码图形中的暗区和亮区(黑、白)区域能够以最佳比例分布。

算法不再研究了。 有兴趣的同学可以继续。

7、格式和版本信息:生成格式和版本信息并放到相应区域。

版本7-40都包含版本信息,没有版本信息的都为0。二维码上的两个位置都包含版本信息,是多余的。

版本信息共有18位,6X3的矩阵,其中6位为数据位,如版本号8,数据位信息为,后面的12位为纠错位。

至此,二维码编码过程基本完成。 当然,我们在开发的时候并不需要自己去写上面的算法。 我们直接使用第三方包zxing就可以了。