随着科技的发展,整个世界已经充满了二维码。看网页需要扫码、加好友要扫码,就连楼下卖菜的大爷都支持扫码支付了。今天,笔者就用通俗易懂地给您介绍一下二维码到底是什么原理呢?
说到二维码,我们就不得不提到二维码的哥哥——条形码,也就是超市收银员结账时扫的那个黑白条。相信看过《天才枪手》的看官们都知道,每条条形码的粗细程度都不一样,经过扫描后,扫描仪就能把二维码转化成数字信息。这些数字信息放到电脑上,就只能找到条形码所对应的商品。
相比起只能在一个水平维度上携带相信的条形码,二维码可以在水平和垂直两个维度上携带信息,这样所能携带的信息量就大大增加了。
说到这里,相信很多看官们都猜到了,二维码就是把信息翻译成黑白小方块,然后把它们填到大方块里。等我们扫码时,黑白小方块又转化成我们要的信息。这就类似于我们考试中所用到的答题卡,也是把我们要的答案转化成机器可扫描的图案,所以机器能在一秒钟之内知道你得了多少分。
如果你要问,为什么所有二维码都有三个方块,其实这三个一模一样的方块,是用来给手机相机定位的。所以我们从哪个方向扫,扫出来的结果都是一样的。
总而言之,条形码和二维码这一对好兄弟,说白了就是给数字、字母和符号换了一身衣服,把它们打扮成了能被手机相机识别的黑白条或块。
二维码的原理可以分为生成原理和工作原理。
首先是生成原理:该原理是,
用特定的几何图形按编排规律在二维方向上分布,采用黑白相见的图形来记录数据符号信息。
为了利用计算机内部逻辑,用数字“0”和数字“1”作为代码,同时使用若干个与二进制相对应的几何形体表示文字数值信息。
这里面我有几个小知识点想提一提。
知识点一:二维码共有40个尺寸
也就是版本version,Version 1.0是21 x 21的正方形,Version 2.0是 25 x 25的(公式:(V-1)*4 + 21)。所以最大的尺寸就是177 x 177 的正方形。
知识点二:三个点确定一个面
二维码只有三个角上有位置探测图案,就是这个就是为了更好的读取二维码。那有人问为什么不是四个能,这个角也不是多余的,可以镶嵌别的信息。
知识点三:旋转二维码,也可以识别
因为有知识点二中所说的位置探测图案和分隔符,所以,无论是正着扫码,还是竖着扫码,或者斜着扫码,信息都可以被识别。
再来看看,二维码的工作原理:
通过常见的图象输入设备或光电扫描设备,它们可以自动读取,并且会对识别出的信息进行自动处理。
因为每个码制有自己的字符集,一个一个的字符占据自己的位置。所以,通过扫描能读取的数据信息在二维码中的位置是由定位图形和分隔符决定的。才能够快速地识别和处理图形旋转、变化等问题。
这里同样有几个有趣的小知识点。
首先,
二维码不但只有黑白色的
,普遍使用黑白色是为了提高其工作效率。
其次,
二维码最早源于日本,但在我国被发扬光大
。
二维码是在一维码的基础上发展而来的,最常见的一维码就是超市商品的条形码,它将每种商品进行编号,用粗细不同的黑条相互组合来组成独一无二的商品指纹,但是一维码只能在同一个方向上进行编码,各种组合的数量有限,因此才产生了二维码。
二维码可以在水平和竖直方向上进行编码,用正方形的黑白格来记录信息,原理是利用了二进制的0和1,打个比方,现在有一个10乘10格子的二维码,每一行都有黑白格,如果用1表示白色的格子,0表示黑色的格子,那么我们可以用类似“0100101100”这样的一行数字来表示每一行的代码,那么将10个这样的数字行排列起来,就组成了一个二维码,我们扫码就相当于解码的过程,可以识别二维码上的信息。二维码还具有容错性,一些二维码只需要扫前面几行就可以识别出信息,哪怕二维码局部破损丢失都可能识别信息,不需要扫全,它比普通条形码译码错误率50万分之1还要低,误码率低于1000万分之1。
二维码是一种比一维码更高级的一种条码格式。一维码只能在水平方向上表达信息,而二维码在水平和垂直方向都可以存储信息。一维码只能由数字和字母组成,而二维码能存储汉字、数字和图片等信息。二维条码有一维条码没有的“定位点”和“容错机制”,容错机制在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。
常见的二维码矩阵式二维条码,是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点的出现表示二进制“1”,点的不出现表示二进制的“0”,这样的排列组合确定了矩阵式二维条码所代表的意义。
二维码的高密度编码,信息容量大,常见的QR码可容纳多达1850个字母或2710个数字或1108个字节或500多个汉字。二维码在最早1994年发明时,基本信息就是只存放在二维码内的,但现在的二维码的用法多是互联网应用,所以更多的是一个网址。
二维码中需要三个定位点,可以理解方块用于定位,三点确定一个面,可以帮助机器正确的解读,用三个点是为了能够让倾斜条件下,也能阅读并识别,三个点可以完整的定位一个正方形,这样就能很容易确定数据范围。所以二维码看起来像个正方形,现在也有很多变异的二维码,但我们常见的基本轮廓大都是正方形。
来来来,极果君又来讲课讲了~
虽说二维码的标准有很多,但现在说起它,基本上指的就是常见的QR码。QR,代表了快速响应。拿起手机,对准,滴,所以叫QR。你应该注意到了,QR码上有三个大的黑色方块,有些中间还会被logo挡住一部分。
二维码的原理是用黑色和白色的方块来代表数据中的0和1,摄像头识别出颜色和排列就能解读出二维码包含的信息。但这有个问题,方块不分上下左右,换个方向去读,程序还能认出原来的信息吗?
能。
这靠的就是上面的三个大黑块,他们在整个图案中起到一个定位的作用。程序识别到这三个块,就会意识到这是一个二维码,并且会自动识别它的正确朝向:两个黑块在上,一个黑块在左下。
有些朋友可能会问为什么不是放四个,有这种想法的同学请自觉面壁( ?° ?? ?°)。
问为什么不放俩的同学也去一起站好。
至于为什么不放一个,其实并不是因为不可行,而是因为不够可靠。你想啊,就一个定位标志,万一污损了,这二维码就读不出来了对不对?
那中间挡住了一块儿怎么还能读呢?
那是因为QR码带有纠错功能,只要定位部分保持清晰,就算有部分区域被遮挡破坏也能保证正常还原数据。根据需求不同,纠错一共有四级,分别能恢复7%到30%不等的数据量。这样只要logo别太大,被挡住也没问题啦。
二维码在我们的生活中已经越来越不可代替,买个早点付个款,甚至追上喜欢的妹子要个微信,也都是展示出二维码自己来扫一扫。但是这个天天见着的小黑白块,为什么就能让你输出金钱,勾搭妹子呢 ?
二维码是一维码的扩展。 在超市购物时,最终的清算,基本上都是柜员扫一遍所有物品的条码然后得出总价。这个条码就是一维条码,将黑色条纹和空白间隙按照一定的规则排列,做成一个平行线图案,就能表达一组相对简单的数字符号信息。
一维条码只在排列黑白条纹的一个方向上记录数据,而二维码则将另一个方向扩展使用上,使其在另一个垂直方向上也记载数据 。虽然形式上有排列式,矩阵式等不同的形式,但是底层代码编码编制上都还是基础的0,1逻辑,使用与二进制相关的图形表达文字数字信息,扫描设备识别图形并在相应特定的字符集中取出对应的数据字符实现自动处理。 并且二维码在一维码的基础上,增设了“定位点”以及“容错机制”,记载数据量更多,能准确传递如图片链接,网络链接等数据。
定位点是二维条码的一个特殊的定位标记。通常的二维码我们都能看到三个角是一样的黑白包容的方块,但是另一个角则不一样,因为三个点就能表示限定出一个矩形的范围,并能让识别设备从正确的方向来识别它,所以二维码不管是从哪个方向上都能识别出来的。
二维码编码生成过程本身是将数据信息转换为图形的过程,读取也就是从图形中读取数据信息。二维码容错性是通过在二维码生成时进行冗余设定,我们将要存入的数据,进行冗余运算在二维码中存入多条相同的数据。经过这个冗余运算的步骤后,生成出来的二维码在有部分破损或者遮挡的情况下仍可识别。如常见的二维码为 QR 码,QR 码的容错率从低到高就有 L,M,Q,H 四个容错等级,等级越高容错性越好,相同破坏比例下被识别的概率越大。而平常使用一般的二维码生成软件也能达到 30%的高容错率,有一点破损污点来识别也是基本OK的。
二维码的原理说简单也简单,就是把编码的内容,用二维图像的形式显示出来;但说难也难,难在如何让手机方便识别,如何即使有了污损也能还原。
前者的原理:把编码的内容,用二维图像的形式显示出来。其实我们已经做了几千年了,绘画、书写,都是这样的原理。所以没有什么稀奇的。二维码最有意思的是他的困难之处。
(二维码,不过扫不出来,因为少了一个定位点)
我们用手机扫描二维码的时候,可不一定是正对着的。我们知道,根据透视的原理,我们拍到的东西基本上不是真正的正方形。这个时候,程序就要能还原回去。二维码四周的三个大黑块和一个中型黑块,就是辅助手机定位的。知道了这几个点的位置,我们就能把二维码还原成正方形。
还原成正方形之后,程序再将其中的0-1数据(黑白)识别出来,然后再解码,就能获得二维码的内容了。
二维码还需要能够承受一定的污损,这样即便有一点瑕疵,也不妨碍我们使用。这就要求在编码中要有一定的冗余。比如把数据重复很多遍,这样损坏一部分,仍然能知道全部的数据。
条码就是由一组按一定编码规则排列的条、空符号,用以表示一定的字符、数字及符号组成的信息。条码可能是迄今为止最经济、实用的一种自动识别技术。条码技术具有输入速度快、可靠性高、采集信息量大、灵活实用几个方面的优点。
二维码出现之前,还有一种一维码,也就是条形码,条形码由于是一维条码,更多的描述物品的信息只能依赖于后台的数据库。但随着人们对编码的大容量和高精度要求的进一步提高,一维码已经不能满足人们在某些领域的需要,正是在这种技术背景下,二维码的概念出现了。
二维码是在一维码的基础上,在两个方向上进行的编码和解码。二维码是用某种特定的集合图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息;这将极大地增大编码的容量,从而很好地解决条形码容量不足和编码加密机制过于简单的问题,从而增强了条形码的容量和加密功能。在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图形输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制都有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能及处理图形旋转变化等特点。
一切正在发生,思想陶熔鼓铸。
二维码其实是从条形码转化而来,条形码又称一维码。
二维码与之比起来能够涵盖的内容丰富,领域广。由于他的便利,方便,还有安全性,很适合现在我们的生活。
二维码刚开始诞生于日本,但是被我们国家发扬光大,当然这跟我们的消费方式有很大的联系。在2016年,停了两年之久的支付宝支付又再次进入我们的日常生活中,并且一发不可收拾。
二维码的原理是什么呢?
就是用特定的几何图形在平面上记录符号信息。了解过计算机的应该都有所了解计算机内部的二进制处理信息的方式,0和1,我们称之为比特流。而利用电脑编码的二维码,就是由二进制进化而来。
我们用几何图形来代表数字0或1,比如说二进制中010001011代表的是信息,从数字表面看来看不出什么,但是放到电脑上进行解码就可以了解到他代表的含义。二维码就是这样,只不过把0或1变成了一个一个的小图形。
反过来看:二维码就是使用二进制相对应的几何图形来表示数值信息,通过扫描设备将几何图形转化为二进制的语言,
再经过转化就可以显示出二维码所蕴涵的内容。这也是为什么二维码经过扫描之后产生数据的原因。
二维码为什么是黑白相间的?黑色表示二进制的“1”,白色表示二进制的“0”
“我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中。”黄海平说,“制作二维码输入的信息可以分成三类,文本信息,比如名片信息;字符信息,比如网址、电话号码;还有图片信息,甚至还可以包括简短的视频。”数据信息是怎么被编入的呢?信息输入后,首先要选择一种信息编码的码制。现在常见的二维码都是以QR码作为编码的码制。QR码是矩阵式二维码,它是在一个矩形空间内,通过黑、白像素在矩阵中的不同分布,来进行编码的。我们知道电脑使用二进制(0和1)数来贮存和处理数据,而在二维码中,用黑白矩形表示二进制数据我们肉眼能看到的黑色表示的是二进制“1”,白色表示二进制的“0”,黑白的排列组合确定了矩阵式二维条码的内容,以便于计算机对二维码符号进行编码和分析。
QR CODE 介绍:
QR(Quick-Response)
code是被广泛使用的一种二维码,解码速度快。它可以存储多用类型。如下图时一个qrcode的基本结构,其中:位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;校正图形:规格确定,校正图形的数量和位置也就确定了;格式信息:表示改二维码的纠错级别,分为L、M、Q、H;版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本
每边增加4个模块。数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。
简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符;
选择纠错等级,在规格一定的条件下,纠错等级越高其真实数据的容量越小。数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。
数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),1)分组:012
345 672)转成二进制:012→0000001100 345→0101011001
67 →10000113)转成序列:0000001100 0101011001 10000114)字符数
转成二进制:8→00000010005)加入模式指示符(上图数字)0001:0001 0000001000 0000001100
0101011001 1000011对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的
纠错编码:按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了,比如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。就是说二维码区域中大约1/3的码字时冗余的。对于这224个纠错码字,它能够纠正112个替代错误(如黑白颠倒)或者224个据读错误(无法读到或者无法译码),这样纠错容量为:112/346=32.4%
构造最终数据信息:在规格确定的条件下,将上面产生的序列按次序放如分块中,按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块
按顺序构成一个序列,添加到原先的数据码字序列后面。如:D1, D12, D23, D35, D2, D13, D24, D36, ...
D11, D22, D33, D45, D34, D46, E1, E23,E45, E67, E2, E24, E46,
E68,...构造矩阵:将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。
掩摸:将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。 一个算法,不研究了,有兴趣的同学可以继续。格式和版本信息:生成格式和版本信息放入相应区域内。版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。版本信息共18位,6X3的矩阵,其中6位时数据为,如版本号8,数据位的信息时
001000,后面的12位是纠错位。至此,二维码的编码流程基本完成了,下面就来实践一下吧,当然不用自己再去编写上面的算法了,使用三方包zxing
就可以了编码:public static void encode(String content, String format, String
filePath) {try {Hashtable hints = new
Hashtable();//设置编码类型hints.put(EncodeHintType.CHARACTER_SET,
DEFAULT_ENCODING);//编码BitMatrix bitMatrix = new
QRCodeWriter().encode(content,BarcodeFormat.QR_CODE,
DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT,hints);//输出到文件,也可以输出到流File file
= new File(filePath);MatrixToImageWriter.writeToFile(bitMatrix, format,
file);} catch (IOException e) {e.printStackTrace();} catch
(WriterException e1) {e1.printStackTrace();}}解码: BufferedImage image =
ImageIO.read(file);//读取文件LuminanceSource source = new
BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new
BinaryBitmap(new HybridBinarizer(source)); //解码Result result = new
MultiFormatReader().decode(bitmap);String resultStr = result.getText();
System.out.println(resultStr);
本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击
一键举报。
视频转二维码
音频转二维码
图片转二维码
PDF转二维码
Word转二维码
Excel转二维码
PPT转二维码
电话二维码
借还登记二维码
巡逻巡更二维码
扫码领奖品二维码
成绩查询二维码
视频直播二维码
产品防伪二维码
商品标签二维码
员工二维码
展品二维码
景点二维码
签到登记二维码
报名二维码
企业二维码
客服二维码
手机二维码
设备二维码
巡检二维码
固定资产二维码

微信扫码咨询:获得专属方案PPT |