python3生成个性二维码

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()

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值