二维码结构
1.版本信息:version1(21*21),version2,...,version40,一共40个版本。版本代表每行有多少模块,每一个版本比前一个版本增加4个码元,计算公式为(n-1)*4+21,每个码元存储一个二进制0或者 1。1代表黑色,0表示白色。比如,version1表示每一行有21个码元。
2:格式信息:存储容错级别L(7%),M(15%),Q(25%),R(35%)。容错:允许存储的二维码信息出现重复部分,级别越高,重复信息所占比例越高。目的:即使二维码被图标遮住一部分,一样可以获取全部二维码内容。有图片的二维码, 图片不算二维码的一部分,它遮住一部分码元,但还是可以扫描到所有内容。
3.数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误,就是说当码元被图片遮住,可以通过纠错码字来找回)。
4.位置探测图形、位置探测图形分隔符、定位图形,校正图形:用于对二维码的定位。位置探测图形用于标记矩形大小,3个图形确定一个矩形。定位符是因为二维码有40个版本尺寸,当尺寸过大后需要有根标准线,不然扫描的时候可能会扫歪。

二维码的生成
信息按照一定的编码规则后变成二进制,通过黑白色形成矩形。
1、根据version和纠错级别(纠错码的数量)编码生成一个二进制序列,序列包含
编码类型的二进制(数字类型,字符类型有特定的编码)     编码内容的长度的二进制      编码内容的二进制    结束符(4个0)
2、将序列按8bits为一组重排,如果所有的编码加起来不是8个倍数,还要在后面加上足够的0。
3、补码。如果序列还没有达到最大的bits数的限制,还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001。每种版本的bits的位数是不同的。
4、生成纠错码。可以查看文档的第30页到44页的Table-13到Table-22的定义表,可以知道生成纠错码的过程。
5、穿插放置。把数据码和纠错码的各个8位一组的十进制数(codewords)交替放在一起。如何交替呢,规则如下:
对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。
对于纠错码:规则也是一样。
然后按数据码在前纠错码在后合并起来。
6、加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看文档的第15页的Table-1的定义表。
7、按照一定规则进行掩码,就是进行异或,分散数据,进行画图。

二维码的解析


1、定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。

2、灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。

3、去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。

4、二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。

5、二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。

得到数据

文档连接:http://download.csdn.net/detail/kelindame/8614203

二维码的生成和解析原理相关推荐

  1. .net core 的图片处理及二维码的生成及解析

    写代码这事,掐指算来已经十有余年. 从html到css到javascript到vbscript到c#,从兴趣到职业,生活总是失落与惊喜并存. 绝大部分时候,出发并不是因为知道该到哪里去,只是知道不能再 ...

  2. 二维码的生成和解析(qrcode 和 zxing)

    二维码的生成和解析(qrcode 和 zxing) 本文主要说明了 qrcode 和 zxing 两种方式生成二维码.原创,复制可用.直接上代码- 生成解析工具 package com.feng.wo ...

  3. java利用core 工具实现二维码的生成与解析

    java利用core 工具实现二维码的生成与解析 简单介绍下二维码:二维码其实就是一种编码技术,只是这种编码技术是用在图片上了,将给定的一些文字,数字转换为一张经过特定编码的图片,而解析二维码则相反, ...

  4. 基础——二维码的生成细节和原理

                                           二维码的生成细节和原理 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一 ...

  5. java实现二维码的生成和解析包含工具类

    1.下载jar包( jdk1.7) 链接:https://pan.baidu.com/s/1LVq_zGsp_Po8V456h1TVmA 提取码:vqyd 2.工具类Utils.java packag ...

  6. 小知识:浅谈二维码的生成和识别原理

    目录 前言 条形码 静态二维码 二进制生成图形码 二维码的定位 前言 不知不觉中,我们的生活到处充满了二维码.登录账户需要二维码:加好友需要二维码:共享单车需要二维码:商品包装上也有二维码:甚至连楼下 ...

  7. 浅谈二维码的生成和识别原理

    前言 不知不觉中,我们的生活到处充满了二维码.登录账户需要二维码:加好友需要二维码:共享单车需要二维码:商品包装上也有二维码:甚至连楼下卖水果的阿姨手里都拿张二维码收款.那么,有没有想过这个二维码到底 ...

  8. 一维码和二维码的生成与解析

    转载至https://blog.csdn.net/weixin_38902950/article/details/86771397 注意: 1.Zxing生成的条形码下边没有数字,barcode4j有 ...

  9. 二维码的生成细节和原理

    转自:http://coolshell.cn/articles/10590.html#jtss-tsina 陈皓 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备 ...

最新文章

  1. C#之windows桌面软件第七课:(下集)串口工具实现数据校验、用灯反应设备状态
  2. Array和ArrayList区别
  3. 使用子查询进行编号重排的处理示例.sql
  4. 人工智能的搭便车指南
  5. [css] 使用纯css来创建一个滑块
  6. spark任务shell运行_Spark原理与实战之部署模式与运行机制
  7. JSP+Servlet--简易的博客功能开发
  8. 跟着百度学PHP[13]-文件上传
  9. 微信公众帐号开发教程第9篇-QQ表情的发送与接收
  10. 展讯平台实现维吾尔语的几种方法
  11. 我是这么自学Java的
  12. android连接打印机打印pdf文件,在android中打印pdf
  13. java7 pc6_GitHub - ShingmoYeung/oss-sdk-java at ec7c09757dcbcb2b934f46b12ab71f3e14d2df72
  14. matlab 空间后方交会,摄影测量空间后方交会.docx
  15. linux合并mp4,Linux 下使用ffmpeg 将批量合并ts文件,合成mp4格式
  16. 从实习到毕业从事前端工作这两年
  17. 在eclipes 中配置python
  18. Windows、Firefox、ideal、Excel下常用快捷键
  19. 天下谁人不识君的上一句是什么,天下谁人不识君的意思?全诗赏析
  20. python 床前明月光_Python之利用Whoosh搭建轻量级搜索

热门文章

  1. [转] MATLAB快捷键
  2. 科研试剂Norbornene-5-TAMRA,降冰片烯-5-羧基四甲基罗丹明
  3. 死区特性函数以及MATLAB验算
  4. 基于nodejs+vue+elementui酒店民宿客房预订管理系统
  5. Affine-Transformation Parameters Regression for Face Alignment
  6. 最快的扫雷记录,初级只需要0.49秒,一眨眼就结束的操作!
  7. 日语生可以选计算机专业吗,高考日语生,不建议你大学报日语专业!
  8. Windows 10 屏幕亮度调节快捷方法
  9. PO系列之 PO接口在ECC中的开发
  10. 一个创业者的自白:假如重回华为怎么做?