Python生成二维码——QRCode

QRCode

什么是二维码?

​ 二维码有称为二维条码,常见得二维码为QRCode,是某种特定的几何图形按照一定规律黑白相间的平面图形,用来记录数据符号的信息。

二维码的常见应用有哪些?

交通出行
Python生成二维码——QRCode_第1张图片

支付购物
Python生成二维码——QRCode_第2张图片

交友沟通

Python生成二维码——QRCode_第3张图片

Python生成二维码——qrcode库

安装方法

pip install qrcode

简单应用

生成二维码并保存,内容为hello world

import qrcode
img = qrcode.make('hello world')
img.save('hello.png')

执行结果

Python生成二维码——QRCode_第4张图片

高级用法

二维码生成方式

import qrcode
qr = qrcode.QRCode(
    version=3,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=5,
)
qr.add_data('www.baidu.com')
qr.make(fit=True)
img = qr.make_image()
img.save('baidu.png')
print('二维码已生成')

参数含义

version:值为1~40的整数,控制二维码的大小(最小值是1,是个21x21的矩阵)。version1(21x21),version2…version40.。每一个版本比前一个版本增加4个码元模块,计算公式为**(n-1)4+21*。每个码元存储一个二进制0或1。黑色表示二进制"1",白色模块表示二进制的”0“。

error_correction:控制二维码的错误纠正功能。可取值下列4个常量。

	ERROR_CORRECT_L  7%以下的错误会被纠正 
	ERROR_CORRECT_M  (default) 15%以下的错误会被纠正 
	ERROR_CORRECT_Q  25%以下的错误会被纠正 
	ERROR_CORRECT_H. 30%以下的错误会被纠正

box_size:控制二维码中每个格子的像素数,默认为 10。

border:控制二维码四周留白包含的格子数,默认为4。

常用方法

1、add_data((str,optimize=20))添加要转换的文字到data参数;如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为“0”以避免优化。

2、make(fit=True):当fit参数为真或者没有给出version参数时,将会调用bestfit方法来找到适合数据的最小尺寸。如果没有设置maskpattern,将会调用bestmaskpattern方法来找到找到最有效的掩模图案。最后将这些数据传递给makeImpl方法来生成二维码。与qrcode本体的make方法不一样的是,这个方法没有任何返回值。

3、makeimage(fillcolor=None, backcolor=None,imagefactory=None):创建二维码的图像并返回,默认为 PIL 图像。如果要让二维码有颜色,可以在这里设置。

4、clear:清空数据

5、get_matrix:返回二维码数组

实战案例:

生成一个百度二维码,并在二维码中添加logo。

from PIL import Image
import qrcode

# 创建
qr = qrcode.QRCode(version=4,error_correction=qrcode.constants.ERROR_CORRECT_H)
qr.add_data("http://www.baidu.com")
qr.make(fit=True)

img = qr.make_image()
img = img.convert("RGBA")

#logo在当前文件夹
icon = Image.open("baidu_logo.jpg")

img_w,img_h = img.size
factor = 5
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)
# 将logo粘贴到二维码图像中
w = int((img_w - icon_w)/2)
h = int((img_h - icon_h)/2)
icon = icon.convert("RGBA")
img.paste(icon,(w,h))
img.save('baidu_qrcode.png')

你可能感兴趣的:(学习笔记)