python3生成的二维码:
1.有背景图
2.有logo图
3.带文字
4.自己改参数名
注:请把Excel文件和这个二维码生成的py文件放在同一目录下。
#-*- coding:utf-8 -*-
from PIL import Image,ImageDraw,ImageFont
import qrcode #二维码模块
import xlrd #读取Excel
def read_excel(): #读取Excel文件
worksheet = xlrd.open_workbook('./bus.xlsx') #打开excel文件
sheet_names= worksheet.sheet_names() #获取excel中所有工作表名
#print(sheet_names)
Data_sheet = worksheet.sheets()[0] #通过索引获取sheet表名
#print(Data_sheet.name) #获取sheet表名
#rows = Data_sheet.row_values(0) #获取第一行的数据
#print(rows)
cols = Data_sheet.col_values(0) #获取第一列的数据
#print(cols)
return cols
#生成二维码
def create_qrcode(busNum):
qr = qrcode.QRCode(
version=1,
#设置容错率为最高
error_correction=qrcode.ERROR_CORRECT_H,
box_size=10,
border=0, #border代表二维码边框大小
)
qr.add_data(busNum)
qr.make(fit=True)
img = qr.make_image()
#设置二维码为彩色
img = img.convert("RGBA")
icon = Image.open('bus_logo.png') #添加logo图
w, h = img.size
factor = 4
size_w = int(w / factor)
size_h = int(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((w - icon_w) / 2)
h = int((h - icon_h) / 2)
icon = icon.convert("RGBA")
newimg = Image.new("RGBA", (icon_w + 8, icon_h + 8), (255, 255, 255))
img.paste(newimg, (w-4, h-4), newimg)
img.paste(icon, (w, h), icon)
img.save('./busNum/' + busNum + '.png', quality=100)
#图片合成
def img_compound(busNum):
#加载底图
base_img = Image.open('./bg1.png')
# 可以查看图片的size和mode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
# print base_img.size, base_img.mode
#print(base_img.mode)
base_img = base_img.convert('RGBA') #把底图设置为RGBA
box = (300, 400, 1200, 1200) # 底图上需要P掉的区域
#加载需要P上去的图片
tmp_img = Image.open('./busNum/'+busNum+'.png')
#这里可以选择一块区域或者整张图片
#region = tmp_img.crop((0,0,304,546)) #选择一块区域
#或者使用整张图片
region = tmp_img
#使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
# 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
#提前将图片进行缩放,以适应box区域大小
# region = region.rotate(180) #对图片进行旋转
region = region.resize((box[2] - box[0], box[3] - box[1]))
base_img.paste(region, box)
#base_img.show() # 查看合成的图片
base_img.save('./busNum/'+busNum+'.png') #保存图片
# image: 图片 text:要添加的文本
def add_text_to_image(busNum):
font = ImageFont.truetype('C:\Windows\Fonts\SIMYOU.ttf', 100) #好像必须要这个字体文件才行,其他的字体文件,我这边都报错了
texts =''
for i in busNum:
texts = texts + i + ' '
#print(texts)
#text = texts.decode('utf-8')
#打开图片
imageFile = './busNum/'+busNum+'.png'
im1 = Image.open(imageFile)
#画图
draw = ImageDraw.Draw(im1)
draw.text((400, 1220), texts, (0, 0, 0), font=font) #设置文字位置/内容/颜色/字体
draw = ImageDraw.Draw(im1) #Just draw it!
#另存图片
im1.save('./busNum/'+busNum+'.png')
#create_qrcode()
#read_excel()
def create():
busNums = read_excel() #读取Excel文件
for busNum in busNums:
if busNum =='':
busNums.remove(busNum)
else:
create_qrcode(busNum)
img_compound(busNum)
add_text_to_image(busNum)
print("二维码生成完成!")
create()
#busNum = "2"
#create_qrcode(busNum)
#img_compound(busNum)
#add_text_to_image()