Python实战:使用qrcode生成二维码

前言

现如今,生活中使用到二维码的场景可以说随处可见。特别是手机支付中,通过手机扫描二维码跳转到支付页面,这种场景相信大家不会陌生。

我们日常最常使用到的二维码是矩阵式二维条码(又称棋盘式二维条码)。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。

那么让我们来扒一扒如何使用 Python 生成二维码图片。

一、简单生成二维码

  1. 安装qrcode库
pip install qrcode 

因为国内网速的原因,有时下载会超时,建议使用国内的pip源

pip install qrcode -i https://pypi.douban.com/simple

qrcode 依赖 Image 这个包,所以也要安装一个这个包,一样网速慢,建议使用国内的pip源

pip install Image -i https://pypi.douban.com/simple
  1. 生成一个简单的二维码

安装完毕后,咱们生成个简单的二维码试试。(我用的博客主页地址偷偷生成了一个二维码[狗头][狗头])

data = "https://blog.csdn.net/m1090760001"
img = qrcode.make(data)
img.show()
img.save("qr_code.png")

运行一下试试效果
在这里插入图片描述

  1. 生成二维码的一般步骤:
  • 创建QRCode对象
  • add_data()添加数据
  • make_image()创建二维码(返回im类型的图片对象)
  • 自动打开图片,im.show()

上面案例中,我们只使用了img = qrcode.make(data)就实现了一个二维码的生成,原因是qrcode提供简单调用接口。其实你查看源码就可以看到:

def make(data=None, **kwargs):
    qr = QRCode(**kwargs)
    qr.add_data(data)
    return qr.make_image()

二、自定义二维码

如果想生成一个比较复杂的二维码,就要知道怎么去设置相关的属性。

扫描二维码关注公众号,回复: 9722817 查看本文章
  1. 基本的参数:
  • version: 一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。(默认情况是程序自动生成)
  • error_correction: 二维码的纠错范围,可以选择4个常量:
属性 描述
ERROR_CORRECT_L 7%以下的错误会被纠正
ERROR_CORRECT_M 15%以下的错误会被纠正(默认)
ERROR_CORRECT_Q 25 %以下的错误会被纠正
ERROR_CORRECT_H 30%以下的错误会被纠正
  • boxsize: 每个点(方块)中的像素个数
  • border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4
  1. 设置填充格的颜色,设置二维码背景色
# 设置红色的填充格,背景色为白色的二维码
img = qr.make_image(fill_color="red", back_color="white")

在这里插入图片描述
3. 在二维码中加一张图片
可以利用PIL库中image模块的paste函数

# img为二维码图片对象,path标识要添加的图片对象,where表示图片位置
img.paste(path,where,mask=None)

其中,img为image对象;path为所添加图片;where为tuple,如:(x,y),表示图片所在二维码的横纵坐标。
实现比较复杂,请查看实战部分源码,谢谢!

三、实战

# -*- coding: utf-8 -*-
# 生成二维码
import qrcode
from PIL import Image


# 生成二维码
def mark_qrcode(data):
    img = qrcode.make(data)
    img.show()
    img.save("qr_code.png")


def mark_my_qrcode(data):
    qr = qrcode.QRCode(
        version=4,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        border=4,
    )
    qr.add_data(data)
    qr.make(fit=True)
    # 设置红色白底的二维码
    img = qr.make_image(fill_color="red", back_color="white")
    img_w, img_h = img.size
    # 获取logo
    icon = Image.open("m1090760001.jpg")
    icon_w, icon_h = icon.size

    # 设置图片最大尺寸6:1
    factor = 6
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    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)
    # 获取中心的坐标
    c_w = int((img_w - icon_w) / 2)
    c_h = int((img_h - icon_h) / 2)
    img.paste(icon, (c_w, c_h), mask=None)
    img.show()


if __name__ == "__main__":
    data = "https://blog.csdn.net/m1090760001"
    # mark_qrcode()
    mark_my_qrcode(data)

生成图片的实际效果如下(读者在运行上面代码是请先准备一张图片,不然会报错):
在这里插入图片描述

发布了19 篇原创文章 · 获赞 67 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m1090760001/article/details/103192295