Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

普通二维码的生成与解析 #28

Open
CuriosityLxn opened this issue Jan 17, 2018 · 0 comments
Open

普通二维码的生成与解析 #28

CuriosityLxn opened this issue Jan 17, 2018 · 0 comments

Comments

@CuriosityLxn
Copy link

CuriosityLxn commented Jan 17, 2018

二维码技术标准有哪些? | 草料二维码技术博客

详细编码过程

一个QRCode编码教程

1.普通二维码(QR Code,Quick Response Code)构成
image
image

定位:

  • 位置探测图形:二维码有40个尺寸,用这三个“回”字形方块标记二维码矩形大小。
  • 定位图形:大尺寸的定位线,若二维码尺寸过大,需要基准线协助定位。
  • 校正图形:version2及以上的二维码需要它们来协助定位。
    提问:为什么用三个定位点定位一个二维码?
    经过一个点的正方形有无数个,经过两个点的正方形有两个,经过三个点的正方形只有一个,所以用三个点定义,不仅容易确定数据范围,并且能保证在一定的倾斜情况下仍能正确识别。

功能性数据:

  • 格式信息:所有版本均有,用于存放格式化数据。
  • 版本信息:version7及以上的版本有,用于存放版本信息。

数据码和纠错码:

  • 其余部分存放数据码和纠错码。
    二维码打印尺寸:
    image

2.数据编码
二维码支持以下数据类型的编码:
image

数据编码 = 编码类型代码 + 编码个数(二进制) + 数据编码
数据码 = 数据编码 + 结束码按8bits重排后 + 补齐码
数据区编码 = 数据码打乱 + 纠错码(Reed-solomon codes)打乱
画图用编码 = 数据区编码 + Reminder Bits
ISO-8859-1:对应于ISO/IEC 10646即Unicode的前256个码位。(维基截图)
image

3.画二维码图

  • 画三个大回字
  • 画九个小回字
  • 画两条标识线
  • 画格式信息
  • 画版本信息
  • 填充2中最终编码
  • 与掩码图案做XOR(按位异或)得到最终二维码

具体实现:

二维码有40种尺寸,最小的version 1 是21px*21px,最大的version 40 是177px * 177px,每个尺寸比上一个大4px。

选择纠错码等级:
image

纠错码算法

选择数据需要的最小version

掩码:有8种掩码可选,根据掩码的计算方式操作当前bit的横纵坐标,若结果为0则反转其颜色,反之不做变化。
下面给出8中掩码的计算方式

image

为什么加掩码

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant