二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:好比:字符,数字,中文等等。今天就来跟你们分享一下个人二维码生成解析工具,主要功能就是生成二维码,而且能够添加自定义的Logo。固然,网络上面生成二维码的工具多如牛毛,生成二维码早已再也不新鲜。这个工具的一个亮点就是能够识别二维码,下面就来具体看看吧,不过首先要补充一点二维码的知识。git
1、二维码的版本github
首先,咱们先说一下二维码一共有 40 个尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增长一个 version,就会增长 4 的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高 Version 40,(40-1)*4+21 = 177,因此最高是 177 x 177 的正方形。算法
下面咱们看看一个二维码的实例:网络
2、QR码的容错处理工具
二维码支持纠错处理;纠错处理相对复杂,按照QR码的标准文档说明,QR码的纠错分为4个级别,分别是:学习
3、二维码(QR Code)的容量测试
对于不一样版本的二维码,容量也是不一样的。理论上内容通过压缩处理后能够存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;在上面咱们看到,不一样的Version的QR Code是不一样的矩阵,Version版本越过,也就意味着容量越大。关于容量的计算我没有找到比较权威的算法,这里以初版的来进行计算,初版(21×21)的格式以下:优化
其中的只有黄色的是存储数据的内容,在初版本中只有217(21×21 - 8*9*3 -8)个存储数据的数空间,而其中有用的数据是 217 - 1个数据结尾标志 = 216 ,在216bit ui
216bit/8 = 27Byte 在版本一的QR码中只可以存储27Byte的数据(要是有校验容错就更少了),固然在不一样的容错级别下,容量也是有变化的。编码
因此,version为1的QR Code大概也就能容下十几个字符。
4、二维码的编码
QR 码支持以下的编码:
Numeric mode 数字编码,从 0 到9。若是须要编码的数字的个数不是 3 的倍数,那么,最后剩下的 1 或 2 位数会被转成 4 或 7bits,则其它的每 3 位数字会被编成 10,12,14bits,编成多长还要看二维码的尺寸(下面有一个表 Table 3 说明了这点)
Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。以下所示:(其中的 SP 是空格,Char 是字符,Value 是其索引值) 编码的过程是把字符两两分组,而后转成下表的 45 进制,而后转成 11bits 的二进制,若是最后有一个落单的,那就转成 6bits 的二进制。而编码模式和字符的个数须要根据不一样的 Version 尺寸编成9, 11 或 13 个二进制(以下表中 Table 3)
Byte mode, 字节编码,能够是0-255 的 ISO-8859-1 字符。有些二维码的扫描器能够自动检测是不是 UTF-8 的编码。
这个工具是用WPF基于开源项目ThoughtWorks.QRCode.dll开发的,没有复杂的生成二维码的算法,不管你是新手仍是大牛,都能看的懂。看到这里有些使用过的ThoughtWorks.QRCode.dll的大牛们可能就失望了,不过研究二维码生成的算法确实须要学习不少的东西,还要参考不少的资料,你们有兴趣的能够本身研究一下ThoughtWorks.QRCode的源码,下面给出了一些参考资料。下面来先来看看工具的截图:
ThoughtWorks.QRCode源码地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
ThoughtWorks.QRCodeGithub地址:https://github.com/aaronogan/QR.NET
界面很简单,下面简单来讲明一下:
二维码的内容:生成的二维码内容,能够输入任何的字符串,好比网址之类的,支持中文。
二维码尺寸:生成二维码的大小,默认值为4,数字越大,生成的二维码越大,能够根据需求填写。
二维码版本:二维码的Version,值为1~40,version越高,二维码信息容量越大。可是目前30以上的版本生成的二维码,因为手机摄像头等缘由会形成手机没法识别。
生成:生成指定内容的二维码,而后显示在左下方的图片框中。
保存:保存二维码,将二维码另存为png格式的图片。
打开二维码:打开二维码图片,显示在左下方的图片框中。
解析:解析左下方中图片框中的二维码,解析结果会显示在二维码内容后面。
自定义Logo:点击添加图片做为Logo,不添加则生成的二维码中没有Logo.
下面来生成一个二维码看看吧,如图:
而后咱们添加一个Logo来看看吧,以下图:
因为Logo的尺寸能够自由调节,有时候Logo设置的过大,会覆盖二维码中的部分信息,形成没法识别。这个时候,咱们能够点击解析按钮,来测试咱们的二维码是否有效,如图:
咱们看到解析出来的内容出现了乱码,这个就是由于咱们的Logo尺寸太大了,咱们能够减少Logo的尺寸或者增大二维码的尺寸,这里我修改二维码尺寸为6,而后就能够正常识别了。而后咱们点击保存按钮,打开另存为对话框,会保存为png格式的图片,实际生产的二维码尺寸如图:
下面咱们来看一下解析二维码,咱们从百度上面随便下载一个二维码图片,看看里面保存了什么,如图:
这里咱们能够鼠标选择文本复制,或者直接点击复制到剪切板来复制二维码的内容。
下面来讲说一些Bug处理,首先要说的是二维码的容量问题,Version为1的二维码容量约为十几个字符,超出容量就会出现下面错误,如图:
固然,若是你随便打开一张无效的二维码图片当作二维码来解析,会出现以下错误,如图:
固然,若是图片中含有二维码仍是能够解析成功的,如图:
Github地址:https://github.com/yunfeifei/QRCodeTools
固然,软件还有不少要优化的地方,存在许多未知的Bug,后面会不断修改更新。欢迎你们进行评测,指出bug和不足之处。通过测试,若是二维码太大或者版本过高都会出现识别不了的状况,固然选择合适的尺寸和版本仍是正常使用的。
做者:雲霏霏
QQ交流群:243633526
博客地址:http://www.cnblogs.com/yunfeifei/
声明:本博客原创文字只表明本人工做中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未受权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文链接。
若是你们感受个人博文对你们有帮助,请推荐支持一把,给我写做的动力。