python-脚本自动生成二维码QRcode/quick response code

使用python的qrcode包

安装

pip install qrcode[pil] --user

命令行使用

qr "你的名字" > test.png

脚本中使用

import qrcode
img = qrcode.make("你的名字")
#保存方法1
with open("a.png", "wb") as f:
    img.save(f)
    
#保存方法2
img.save("b.png")
qr = qrcode.QRCode(
    version = 1,    #None(default),自动调整大小
    error_correction = qrcode.constants.ERROR_CORRECT_L,
    box_size = 10,   # 用默认吧。每个方块中像素的个数
    border = 5,)    # border是二维码与图像外围边框的距离,默认是4,且规定最小为4
    
qr.add_data('你的名字')  #添加数据
# add_data(str, optimize=20)  optimize设置为0可以避免优化。

qr.make(fit=True)
# 如果前面没有给出version,或者fit=True就会自动调大小;
# 如果没有设置mask_pattern,就会调用best_mask_pattern找合适的mask。 

img = qr.make_image(fill_color="blue",back_color="white")
# 默认返回PIL图像。不指定颜色的话,默认黑白。

img.save("a.png")
# 如果:img = qr.make_image(image_factory=qrcode.image.svg.SvgImage) # 生成svg文件
# 保存时save成*.svg即可

error_correction的四个常量

名称含义
qrcode.constants.ERROR_CORRECT_L7%以下的错误会被纠正
qrcode.constants.ERROR_CORRECT_M15%以下的错误会被纠正(default)
qrcode.constants.ERROR_CORRECT_Q25%
qrcode.constants.ERROR_CORRECT_H3%

完整案例

import qrcode
import qrcode.image.svg
from PIL import Image
def getQRcode(data, file_name, logo_file_name=None):
    qr = qrcode.QRCode(
        #version=1, # None(default),自动调整大小
        error_correction=qrcode.constants.ERROR_CORRECT_Q,
        #box_size=5,
        border=4,
    )
    qr.add_data(data)
    qr.make(fit=True) # 二维码自动调整大小
    #img = qr.make_image(fill_color="black", back_color="white")
    #img = qr.make_image(image_factory=qrcode.image.svg.SvgImage) # 生成svg文件
    img = qr.make_image()
    if logo_file_name != None:
        # 插入logo
        logo = Image.open(logo_file_name)
        # size of qr-code
        img_w, img_h = img.size
        # set size of logo
        factor = 8
        size_w = int(img_w / factor)
        size_h = int(img_h / factor)
        logo_w, logo_h = logo.size
        if logo_w > size_w:
            logo_w = size_w
        if logo_h > size_h:
            logo_h = size_h
        logo = logo.resize((logo_w, logo_h), Image.ANTIALIAS)
        x = int((img_w - logo_w) / 2)
        y = int((img_h - logo_h) / 2)
        img.paste(logo, (x, y))
        #plt.imshow(img)
        #plt.show()
    img.save(file_name)
    return img
if __name__ == '__main__':
    getQRcode("川普","name.png")
    getQRcode("川普", "name_logo.png", "logo.jpg")

name.png
logo.jpg
name_logo.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值