QrCode二维码生成原理与细节

QrCode二维码是由日本丰田子公司 Denso Wave于1994年发明并开始使用的一种矩阵二维码符号。它不仅信息容量大、可靠性高、成本低,还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。因此,很快就得到迅速普及。但它是如何生成的呢?今天小编就和大家分享一下二维码的生成原理细节。

在学习二维码的生成细节之前,建议先了解一下二维码的基础知识,也就是我们昨天发的文章《QrCode二维码的基础知识

数据分析

分析并确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级(容错率),在规格一定的条件下,纠错等级越高其真实数据的容量越小。

数据编码

把想要储存的信息转换成二进制编码,这个过程称之为数据编码。将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。对于不同的数据类型(数字、字符、汉字等)要采取不同的模式和指示符。如下图所示

QrCode二维码生成原理与细节

数据可以按照一种模式进行编码,以便进行更高效的解码。对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的。下图是英文字符的编码方式:

QrCode二维码生成原理与细节

结束符和补齐码

编码后我们还要加上结束符0000。然后按照按8bits重排,如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001,假设我们需要编码的是Version 1的Q纠错级,那么其最大需要104个bits,而我们只有80个bits,所以,还需要24个bits,也就是需要3个Padding Bytes,我们就添加三个11101100 00010001。

纠错码

二维码中有四种级别的纠错(容错率),这一步,需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。

二维码的纠错码主要是通过Reed-Solomon error correction(里德-所罗门纠错算法)来实现的。这个算法相当复杂,里面涉及很多的数学计算,在这里就不展开说了。

构造矩阵

将探测图形、分隔符、定位图形、校正图形和码字模块放入对应规格的二维码矩阵中。

QrCode二维码生成原理与细节

掩膜

这样下来,我们的图就填好了,但是,也许那些点并不均衡,所以,我们还要做Masking操作,将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。下图是加入掩膜前后的对比

QrCode二维码生成原理与细节

到这里二维码就已经生成好了,希望你能从中得到启发!当然你可以使用兔子二维码生成器来生成二维码,更加方便!

原文地址:http://coolshell.cn/articles/10590.html#jtss-tsina

标签:

评论已关闭!

兔子二维码