Python qrcode二维码操作——(一)简单使用qrcode

既然我们是要对二维码进行创建和解析,那我们就必须先来认识一下什么是二维码:
二维码是一种在一维码基础上扩展出来的可读性条码,用黑白矩形图案表示二进制数据;那么问题又来了,一维码又是什么?下面我们经常会在包装袋上面看到的条形码:

这就是一维码,我们可以看见它是由长度相同,粗细不同的线条构成,那么他是什么存储数据的呢?那我们就要找不同点,粗细是他们的变量,即用宽度存储数据,这是一维方案;
二维码就是在一维码的基础上,长度和宽度都记录着数据,这就是上面说的在一维的基础上又增加一个维度;二维码还有一维码没有的定位点和容错机制,容错机制可以在没有辨别全部条码的时候正确还原条码上的信息,这样就能保证在条码有破损的时候还能够正确还原;
二维码的种类有很多,这里就不赘述了,下面放出我博客的二维码来结束这一趴:

那么我们接下来就来学习一下qrcode库的使用:

  1. 安装qrcode库和pillow库
    pip install pillow        # 因为这个库是qrcode的依赖库,用于处理图像
    pip install qrcode
  2. 接下来我们就来创建一个二维码:
    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)最后就是生成图像并返回了,这里还涉及到了等等的参数,下面再详细说明;

  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):
           
  4. 我们接下来就自定义属性参数来生成一个二维码:
    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')    # 保存二维码图片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章