既然我们是要对二维码进行创建和解析,那我们就必须先来认识一下什么是二维码:
二维码是一种在一维码基础上扩展出来的可读性条码,用黑白矩形图案表示二进制数据;那么问题又来了,一维码又是什么?下面我们经常会在包装袋上面看到的条形码:
这就是一维码,我们可以看见它是由长度相同,粗细不同的线条构成,那么他是什么存储数据的呢?那我们就要找不同点,粗细是他们的变量,即用宽度存储数据,这是一维方案;
二维码就是在一维码的基础上,长度和宽度都记录着数据,这就是上面说的在一维的基础上又增加一个维度;二维码还有一维码没有的定位点和容错机制,容错机制可以在没有辨别全部条码的时候正确还原条码上的信息,这样就能保证在条码有破损的时候还能够正确还原;
二维码的种类有很多,这里就不赘述了,下面放出我博客的二维码来结束这一趴:
那么我们接下来就来学习一下qrcode库的使用:
- 安装qrcode库和pillow库
pip install pillow # 因为这个库是qrcode的依赖库,用于处理图像 pip install qrcode
- 接下来我们就来创建一个二维码:
import qrcode # 导入库 img = qrcode.make('https://blog.csdn.net/u014663232') # 最后会返回一个qrcode.image.pil.PilImage对象,最后会返回一个二维码图片对象 img.save('geeknuo_csdn.png') # 调用save()方法将图片对象保存下来
接下来我们通过原型来看下,它都做了些什么:
我们可以看见make()方法在开始创建了一个QRCode对象,然后调用add_data()方法,将我们数据信息添加了进去,最后调用make_image()方法返回了图片对象;
那么我们可以推出最终产生图片的地方肯定在make_image()里面,我们接下来看:
1)首先检查数据有没有编译,如果没有编译,就需要先进行编译;
2)image_factory我这边理解的是生成器,这边我们可以指定生成器,如果没有指定的话,这里就会使用PIL作为生成器,这就是为什么依赖pillow库的原因;
3)最后就是生成图像并返回了,这里还涉及到了等等的参数,下面再详细说明; - 那么上面已经生成了一个二维码,但是不得不说,非常的难看,而且尺寸什么的都是固定的,那么接下来我们就来对参数进行设置,定制我们想要的二维码:
既然make()最开始是创建了一个QRCode对象,那么我们先来看下QRCode()中有什么:
那么我们可以看见有这里有6个参数:
1)version 表示二维码的版本号,一种有1~40个版本,最小是21*21,每增加一个版本会增加4个尺寸(注意:这里的尺寸并不是指生成图片的大小,而是二维码的长宽被分成了多少份)
2)error_correction 指的是纠错容量,这就是为什么在二维码上面放张图片还可以被识别出来的原因,它一共有四个级别:
ERROR_CORRECT_L:大约7%或更少的错误能被纠正
ERROR_CORRECT_M(默认):大约15%或更少的错误能被纠正
ERROR_CORRECT_Q:大约25%或更少的错误能被纠正
ERROR_CORRECT_H:大约30%或更少的错误能被纠正
3)box_size 指的是生成图片的像素,所以这里是定义大小的,我们可以看见上面,默认为10
4)border 表示二维码边框的宽度,同样的,上面默认是4,也是最小值
5)image_factory 的参数继承了qrcode.image.base.BaseImage类,其中可以选择的类保存在模板根目录的image文件夹下
6)mask_pattern 选择生成图片的掩模,掩模这边一句两句说不清楚,可以自行百度,或者看后面的链接,我们来看下掩模的过程(图片来自:http://www.360doc.com/content/16/0919/08/9261962_591906164.shtml):
- 我们接下来就自定义属性参数来生成一个二维码:
import qrcode qr = qrcode.QRCode( version=10, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=20, border=10 ) qr.add_data('https://blog.csdn.net/u014663232') # 添加二维码数据 qr.make() # 将数据编译成qrcode数组 image = qr.make_image() # 生成二维码图片 image.save('geeknuo_csdn2.png') # 保存二维码图片