duzhenwen

QRCode官网
https://pypi.python.org/pypi/qrcode/5.1

参数 version 表示生成二维码的尺寸大小,取值范围是 1 至 40,最小尺寸 1 会生成 21 * 21 的二维码,version 每增加 1,生成的二维码就会添加 4 尺寸,例如 version 是 2,则生成 25 * 25 的二维码。

参数 error_correction 指定二维码的容错系数,分别有以下4个系数:
1. ERROR_CORRECT_L: 7%的字码可被容错
2. ERROR_CORRECT_M: 15%的字码可被容错
3. ERROR_CORRECT_Q: 25%的字码可被容错
4. ERROR_CORRECT_H: 30%的字码可被容错

参数 box_size 表示二维码里每个格子的像素大小。

参数 border 表示边框的格子厚度是多少(默认是4)

import qrcode
import sys
from PIL import Image
import matplotlib.pyplot as plt
import traceback
import os
def log(message):
	with open(\'../log.txt\', "w", encoding="utf-8") as f:
		f.write(message+\'\n\')
def getCode(value,logoPath,bgPath,x=356,y=869,version=10,box_size=30,factor=1):
	log(\'二维码大小version:\'+str(version))
	log(\'二维码像素大小box_size:\'+str(box_size))
	qr = qrcode.QRCode(
		version=version,
		error_correction=qrcode.constants.ERROR_CORRECT_Q,
		box_size=30,
		border=1, 
	) 
	qr.add_data(value) 
	qr.make(fit=True)  
	img = qr.make_image( back_color="#FFF")
	 # 添加logo,打开logo照片
	icon = Image.open(logoPath)
	# 获取图片的宽高
	img_w, img_h = img.size
	# 参数设置logo的大小
	factor = factor
	log(\'logo大小参数:\'+str(factor))
	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
	# 重新设置logo的尺寸
	icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
	# 得到画图的x,y坐标,居中显示
	w = int((img_w - icon_w) / 2)
	h = int((img_h - icon_h) / 2)
	# 黏贴logo照
	img.paste(icon, (w, h), mask=None)
	img.save(\'temp.png\')
	log(\'生成中间二维码tmp.png\')
	print(img.size)
	top_img = Image.open(\'temp.png\', \'r\')
	top_img_w, top_img_h = top_img.size
	bottom_img = Image.open(bgPath, \'r\')
	bottom_img_w, bottom_img_h = bottom_img.size
	offset = ((bottom_img_w - top_img_w) // 2, (bottom_img_h - top_img_h) // 2)
	# # 二维码在背景中的图片
	if x==356 and y==869:
		x=offset[0]
		y=offset[1]

	print(x)
	print(y)
	log(\'二位码在背景图中的位置x,y:\'+str(x)+\':\'+str(y))
	bottom_img.paste(top_img,(x,y))
	output_name = \'../code/qrcode.jpg\'
	log(\'结果图保存位置:\'+output_name)
	bottom_img.save(output_name)


if __name__ == \'__main__\':
	#para1:二位码内容 para2:logo地址 para3:背景地址 para4:logo图片x位置 para5:logo图片y位置
	flag=0
	# 二维码在背景中的位置
	x=0
	y=0
	# 二维码大小
	box_size=0
	# 二维码像素
	version=0
	# logo大小比例参数
	factor=0
	if len(sys.argv) <5:
		flag=1
	elif len(sys.argv)<7 and len(sys.argv)>4:
		flag=2
		x=int(sys.argv[4])
		y=int(sys.argv[5])
	elif len(sys.argv)>6 and len(sys.argv)<9:
		flag=3
		x=int(sys.argv[4])
		y=int(sys.argv[5])
		version=int(sys.argv[6])
		box_size=int(sys.argv[7])
	elif len(sys.argv)>8 and len(sys.argv)<10:
		flag=4
		x=int(sys.argv[4])
		y=int(sys.argv[5])
		version=int(sys.argv[6])
		box_size=int(sys.argv[7])
		factor=int(sys.argv[8])
	para=sys.argv[0]
	para1=sys.argv[1]
	para2=sys.argv[2]
	para3=sys.argv[3]
	log(\'参数1:\'+para1)
	log(\'参数2:\'+para2)
	log(\'参数3:\'+para3)
	print(para)
	print(para1)
	print(para2)
	print(para3)


	# el=\'soeiQrCode\\soeiQrCode.exe\'
	# para=\'C:\\Users\\ZL-01\\Desktop\\二维码\\soeiQrCode\\soeiQrCode.exe\'
	# path=para.replace(el,\'\')
	# resultPath=path+\'code\\\'
	# para1="这是一个二维码测试"
	# para2=\'logo.png\'
	# para3=\'backgroundPic.jpg\'
	# para4=int(\'356\')
	# para5=int(\'869\')
	# x=0
	# y=0

	try:
		if flag==1:
			getCode(para1,para2,para3)
		elif flag==2:
			getCode(para1,para2,para3,x,y)
		elif flag==3:
			getCode(para1,para2,para3,x,y,version,box_size)
		elif flag==4:
			getCode(para1,para2,para3,x,y,version,box_size,factor)
	except Exception as e:
		print(\'error\')
		print(traceback.format_exc())
		log(traceback.format_exc())
		os._exit(1)
	print(\'success\')
	if os.path.exists(\'temp.png\'):
		os.remove(\'temp.png\')
	log(\'success\')
	os._exit(0)

在这里插入图片描述

关注微信公众号:菜鸟阿都,一起交流学习

分类:

技术点:

相关文章: