用python制作带logo和标签的二维码图片

python的第三方库很是丰富,前人造了很多好用的轮子,我们拿来即可使用。制作一张普通的没有啥标识度的二维码图片,显然不能满足我们了,至少要在中间打个logo,在底下再带上一行文字标签,才能方便自己和别人查看。
废话不说直接上代码:

from PIL import ImageFont, ImageDraw, Image
import qrcode
import os
import json

def createQrCode(text):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=20,
        border=1,
    )
    qr.add_data(text)
    qr.make(fit=True)
    qrImg = qr.make_image(fill_color="black", back_color="white")
    return qrImg

def createBg(qrImg):
    img = qrImg.resize((580, 580), Image.LANCZOS)
    bg = Image.new("RGB", (580, 660), "#ffffff")
    bg.paste(img, (0, 0))
    return bg

def drawFont(bg, text):
    fontStyle = "e://work//simhei.ttf"
    font = ImageFont.truetype(fontStyle, 48)
    bbox = font.getbbox(text) 
    w,h = bbox[2] - bbox[0], bbox[3] - bbox[1]
    draw = ImageDraw.Draw(bg)
    draw.text(((580 - w) / 2, 620 - h/2), text, fill="#000000", font=font)
    return bg

def drawLogo(qr, logo, proportion):
    w, h = qr.size
    logo = Image.open(logo)
    resizeW = (int(w * proportion))
    logo = logo.resize((resizeW, resizeW), Image.LANCZOS)
    logoW, logoH = logo.size
    center = int((w - logoW) / 2)
    qr.paste(logo, (center, center))
    return qr


def draw(qrText, descText, logoPath, savePath, filename, proportion):
    qrImg = createQrCode(qrText)
    bgImg = createBg(qrImg)
    bgImg2 = drawFont(bgImg, descText)
    res = drawLogo(bgImg2, logoPath, proportion)
    res.save(os.path.join(savePath, filename))
    print(f"生成二维码『{filename}』成功")

with open('e://work//qrcodetext.json','rb') as qrfile :
    qrdata = json.load(qrfile)

targetPath="e://work//qrpics//"
if not os.path.exists(targetPath) or os.path.isfile(targetPath):
    os.mkdir(targetPath)

for i in range(len(qrdata)) :
    draw(qrdata[i]["qrcode"],qrdata[i]["label"],"c://work//logo.png",targetPath,qrdata[i]["label"]+".png",0.4)
print("finished")    

具体原理是先生成一张普通的二维码图片,然后拉伸下,底下留出一块空白区域,将标签文字以特定字体画到该区域,最后把logo图片放在二维码图形的中央区域。最后把整个图形保存到文件就完成了。
在二维码上叠加图片和文字,会不会导致二维码识别不了呢?是这样的,二维码是有容错率的。首先右上,左上,左下3个边角方框形状的标识区域是不能遮挡,总的遮挡面积不超过总面积的三分之一,一般来说都是没问题的,可以正常识别出来。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值