二维码的生成细节和原理(三):画二维码图

画二维码图
PositionDetection Pattern

首先,先把PositionDetection图案画在三个角上。(无论Version如何,这个图案的尺寸就是这么大)

AlignmentPattern

然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)

关于Alignment的位置,可以查看QR CodeSpec的第81页的Table-E.1的定义表(下表是不完全表格)

下图是根据上述表格中的Version8的一个例子(62442

TimingPattern

接下来是TimingPattern的线(这个不用多说了)

FormatInformation

再接下来是FormationInformation,下图中的蓝色部分。

Format Information是一个15bits的信息,每一个bit的位置如下图所示:(注意图中的DarkModule,那是永远出现的)

15bits中包括:

·        5个数据bits:其中,2bits用于表示使用什么样的Error Correction Level 3bits表示使用什么样的Mask

·        10个纠错bits。主要通过BCHCode来计算

然后15bits还要与101010000010010XOR操作。这样就保证不会因为我们选用了00的纠错级别和000Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。

下面是一个示例:

关于ErrorCorrection Level如下表所示:

关于Mask图案如后面的Table23所示。

VersionInformation

再接下来是VersionInformation(版本7以后需要这个编码),下图中的蓝色部分。

Version Information一共是18bits,其中包括6bits的版本号以及12bits的纠错码,下面是一个示例:

而其填充位置如下:

数据和数据纠错码

然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。

掩码图案

这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作(靠,还嫌不复杂)QRSpec中说了,QR8Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。(注:选择一个合适的Mask也是有算法的

Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y

下面是Mask后的一些样子,我们可以看到被某些MaskXOR了的数据变得比较零散了。

Mask过后的二维码就成最终的图了。

好了,大家可以去尝试去写一下 QR 的编码程序,当然,你可以用网上找个 Reed Soloman 的纠错算法的库,或是看看别人的源代码是怎么实现这个繁锁的编码。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值