#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import qrcode
from PIL import Image
def generateQrCode(qr_file="qr_file.png", data=None, icon_file=None, C_ratio=None):
'''
:param qr_file: 保存生成的二维码图片文件
:param data: 二维码里面的内容
:param icon_file: 出现在二维码图片中间的图片
:param C_ratio: 控制出现在二维码图片中间的图片的大小
:return: img
'''
# 创建QRCode对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=3
)
# version: 一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12 的矩阵),如果想让程序自动生成,将值设置为 None并使用fit = True参数即可。
# error_correction: 二维码的纠错范围,可以选择4个常量:
# 1. ERROR_CORRECT_L 7%以下的错误会被纠正
# 2. ERROR_CORRECT_M (default) 15%以下的错误会被纠正
# 3. ERROR_CORRECT_Q 25 %以下的错误会被纠正
# 4. ERROR_CORRECT_H. 30%以下的错误会被纠正
# box_size: 每个点(方块)中的像素个数
# border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4
# 添加数据
qr.add_data(data)
# 填充数据
qr.make(fit=True)
# 生成二维码
img = qr.make_image(fill_color="green", back_color="white")
# 显示二维码
# img.show()
qr_w, qr_h = img.size
# print(qr_w, qr_h)
if icon_file is not None:
# 重做图片大小
try:
icon = Image.open(icon_file)
except Exception as e:
return e
if C_ratio is None:
C_ratio = 5
ic_w, ic_h = int(qr_w / C_ratio), int(qr_h / C_ratio)
# print(ic_w, ic_h)
icon = icon.resize((ic_w, ic_h), Image.ANTIALIAS)
w, h = int((qr_w - ic_w) / 2), int((qr_h - ic_h) / 2)
# print(w, h)
# 添加图片到二维码
img.paste(icon, (w, h), mask=None)
# img.show()
# 保存二维码图片
img.save(qr_file)
return img
if __name__ == '__main__':
qr_file = "dingding.jpg"
data = "窗前明月光,疑似地上霜。举头望明月,低头思故乡。"
img = generateQrCode(qr_file=qr_file, data=data, icon_file="d.jpg", C_ratio=3)
print(img.show())
img1 = generateQrCode(data="study hard, improve every day. 好好学习天天向上")
print(img1.show())
img2 = generateQrCode()
print(img2.show())
网友评论