Python使用QRCode生成二维码,qrcode会依赖Image这个包,所以我们首先安装qrcode和Image:

pip install qrcode
pip install Image
  • 首先我们来写一个最简单的案例,生成一个内容为hello sunxiaoning的二维码,​保存到本地,执行以下脚本,就可以生成一个hello.png的文件,并且自动打开。我们扫描之后就可以看到二维码里面的内容了。是不是很简单啊,​人生苦短,我用python。

    import qrcode 
    img = qrcode.make('hello sunxiaoning')
    # 保存二维码
    img.save('hello.png')
    # 展示二维码
    img.show()
  • 我们在来设置一个中间带有头像的二维码,我们要先安装下Pillow。使用pip install Pillow即可。

    import qrcode
    from PIL import Image
    qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_H,
            box_size=5,
            border=4,
        )
    
    # 添加数据
    qr.add_data('Hello sunxiaoning')
    # 填充数据
    qr.make(fit=True)
    # 生成图片
    img = qr.make_image(fill_color="orange", back_color="white")
    
    # 添加头像,打开头像照片
    icon = Image.open("1.jpeg")
    # 获取图片的宽高
    img_w, img_h = img.size
    # 参数设置头像的大小
    factor = 6
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    icon_w, icon_h = icon.size
    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    # 设置头像的尺寸
    icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
    
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    # 粘贴头像
    img.paste(icon, (w, h), mask=None)
    # 保存img
    img.save('hello.png')
    # 展示二维码
    img.show()

参数详解

  • version 控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。
  • error_correction控制二维码纠错级别。

    • ERRORCORRECTL大约7%或者更少的错误会被更正。
    • ERRORCORRECTM默认值,大约15%或者更少的错误会被更正。
    • ERRORCORRECTQ大约25%或者更少的错误会被更正。
    • ERRORCORRECTH大约30%或者更少的错误会被更正。
  • box_size控制二维码中每个格子的像素数,默认为 10。
  • border控制二维码四周留白包含的格子数,默认为 4。
  • image_factory选择生成图片的形式,默认为 PIL 图像。
  • mask_pattern选择生成图片的的掩模。

方法详解

  • add_data(str,optimize=20) 添加要转换的文字到data参数;如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为“0”以避免优化。
  • make(fit=True)当fit参数为真或者没有给出version参数时,将会调用bestfit方法来找到适合数据的最小尺寸。如果没有设置maskpattern,将会调用bestmaskpattern方法来找到找到最有效的掩模图案。最后将这些数据传递给makeImpl方法来生成二维码。与qrcode本体的make方法不一样的是,这个方法没有任何返回值。
  • makeimage(fillcolor=None, backcolor=None,imagefactory=None):创建二维码的图像并返回,默认为 PIL 图像。可以在这里设置二维码的颜色。
  • clear 清空所有数据。
  • get_matrix 返回二维码数组。
  • print_ascii(out=None, tty=False, invert=False)可以用字符画的形式来输出二维码,但是需要注意的是扫的时候不一定可以扫出来,谨慎使用。
Last modification:October 17, 2020
If you think my article is useful to you, please feel free to appreciate