二维码生成

二维码是一种特殊类型的条形码,易于被光学扫描仪读取来编码文本和数字,可对数字、字母和日文字符等信息进行编码。最小二维码是21×21像素,最大的是177×177像素。二维码具有纠错能力,总共分为4个级别,最低的是L,它可以校准7%的字码,然后是M可以校准15%的字码,再然后是Q可以校准25%的字码,最后是H可以校准30%的字码。

创建步骤

  1. 数据分析:确定是否符号数字、字母、字节或日文模式的编码,再进行最优化的编码模式选择。
  2. 数据编码:下一级详细讲解。
  3. 生成纠错码:当得到文本对应的数据码后,必须再使用这些数据码生成纠错码,为了对扫描仪扫描结果存在错误进行纠正
  4. 最终编码:将生成的数据码与纠错码必须按照一定的顺序排列。
  5. 模块放置在矩阵:排列好数据码和纠错码后,需将这些二进制数字以特定的方式放置在二维码矩阵中。
  6. 掩码图案:二维码规范中定义了八个掩码图案,每种特定的图案可以改变原始二维码图案。
  7. 格式和版本信息:在先前步骤中留下空白的特定区域中增加格式和(如有必要)的版本信息。格式信息定义了纠错等级和掩码图案的模式。版本信息定义了二维码矩阵的大小和并且仅存在于较大的二维码中。

数据编码

二维码有如下编码模式:

  • 数字编码
  • 字符编码
  • 字节编码
  • 日文编码
  • Extended Channel Interpretation(ECI)mode
  • Structured Append mode
  • FNC1 mode

如果输入字符串只包含数字,请使用数字编码模式;若数字模式不适用时,则选择字符编码模式(小写字母不能使用字符编码模式);若字符编码也不适用且字符可以在ISO-8859-1字符集中找到,则使用字节编码模式;如果所有字符都在Shift JIS字符集中,请使用日文编码模式。

单个二维码中可以使用多种编码模式

每种编码模式都使用不同方法将文本转换为二进制数字,并且使用尽可能短的二进制数字来编码数据。

数据编码步骤如下:

  • 选择纠错级别
  • 确定数据的最小版本
  • 增加模式指示符
  • 增加字符计数指示符
  • 使用所选模式进行编码
  • 分成8位码字和添加补齐码(如果必要的话)
    • 确定此二维码所需的位数
    • 添加终止符(如有需要)
    • 添加更多0,使长度为8的倍数
    • 如果字符串仍然太短,则添加不起

二维码识别

二维码识别原理如下:

  1. 寻找二维码的三个角的定位角点,需要对图片进行平滑滤波,二值化,寻找轮廓,筛选轮廓中有两个子轮廓的特征,从筛选后的轮廓中找到面积最接近的3个即是二维码的定位角点
  2. 判断3个角点处于什么位置,主要用来对图片进行透视校正(PS:相机拍到的图片)或者仿射校正(对网站上生成的图片进行缩放拉伸旋转等操作后得到的图片)。需要判断三个角点围成的三角形和最大的角就是二维码左上角的点。然后根据这个角的两边的角度差确定另外两个角点的左下和右上位置。
  3. 根据以上特征识别二维码的范围