详细分析python中QRCode生成二维码的基本知识(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. Demo
  • 3. 彩蛋
  • 3.1 文件路径
  • 3.2 Image.LANCZOS
  • 前言

    以下主要利用python中的QRCode来生成二维码的基本知识

    1. 基本知识

    简单易用,并且可以生成高质量的二维码图像

    支持多种自定义设置,例如二维码的大小、边框、容错级别、颜色等

    先安装:pip install qrcode[pil],[pil] 选项会安装 Pillow,这个库用于处理图像,是生成二维码图像时必需的依赖项

    核心的API如下所示:

    基本的QRCode类如下:

  • version:控制二维码的大小(1 到 40),数字越大,二维码尺寸越大。默认为 1
  • error_correction:设置容错等级,支持以下选项:
    ERROR_CORRECT_L:7% 的字节数据可以被修正
    ERROR_CORRECT_M:15% 的字节数据可以被修正
    ERROR_CORRECT_Q:25% 的字节数据可以被修正
    ERROR_CORRECT_H:30% 的字节数据可以被修正
  • box_size:控制二维码中每个点的大小(像素)
  • border:边框的宽度,以盒子的数量表示(box_size 的倍数)
  • 还有其他的几个API:

    API 描述
    QRCode.add_data(data) 将数据添加到二维码对象中。data可以是字符串、URL 或其他可编码的数据
    QRCode.make(fit=True) 根据数据自动调整二维码的大小
    QRCode.make_image(fill_color=“black”, back_color=“white”) 生成二维码图像,fill_color设置二维码前景色,back_color设置背景色
    QRCode.save() 和 QRCode.show() 分别用于保存和显示生成的二维码图像

    2. Demo

    简单的Demo如下:

    import qrcode
    
    img = qrcode.make('manong')
    img.save('test.png')
    

    简单文本二维码:

    import qrcode
    
    # 创建一个简单的二维码
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    
    # 添加数据到二维码
    qr.add_data("Hello, World!")
    qr.make(fit=True)
    
    # 生成二维码图像
    img = qr.make_image(fill_color="black", back_color="white")
    
    # 保存图像
    img.save("hello_world_qr.png")
    
    # 显示图像
    img.show()
    

    带有url二维码:

    import qrcode
    
    # 生成一个包含URL的二维码
    url = "https://blog.csdn.net/weixin_47872288"
    qr = qrcode.make(url)
    
    # 保存二维码
    qr.save("url_qr.png")
    
    # 显示二维码
    qr.show()
    

    自定义二维码颜色:

    import qrcode
    
    # 创建一个自定义颜色的二维码
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=10,
        border=4,
    )
    
    qr.add_data("Colorful QR Code")
    qr.make(fit=True)
    
    # 生成带有自定义颜色的二维码
    img = qr.make_image(fill_color="blue", back_color="yellow")
    
    # 保存图像
    img.save("colorful_qr.png")
    
    # 显示图像
    img.show()
    

    整体复杂Demo如下:

    import qrcode
    from PIL import Image
    
    # 创建QRCode对象并设置版本、容错等级和边框大小
    qr = qrcode.QRCode(
        version=1,  # 版本控制二维码的大小。1表示21x21的矩阵。
        error_correction=qrcode.constants.ERROR_CORRECT_L,  # 容错等级,L表示7%的字节数据可以被修正。
        box_size=10,  # 控制二维码中每个点的大小(像素)。
        border=4,  # 边框的宽度,单位是盒子的数量(box_size的倍数)。
    )
    
    # 添加数据到QRCode对象
    data = "https://blog.csdn.net/weixin_47872288"
    qr.add_data(data)
    qr.make(fit=True)  # 自动调整二维码大小以适应数据
    
    # 生成二维码图像
    img = qr.make_image(fill_color="black", back_color="white")
    
    # 保存二维码图像到文件
    img.save("qrcode.png")
    
    # 显示二维码图像
    img.show()
    
    # 如果你希望在二维码上叠加一个小图标,如Logo:
    logo = Image.open('logo.png')  # 打开Logo图像
    basewidth = 50  # 设置Logo的宽度
    wpercent = (basewidth / float(logo.size[0]))
    hsize = int((float(logo.size[1]) * float(wpercent)))
    # 将Logo图像缩放到指定大小
    logo = logo.resize((basewidth, hsize), Image.LANCZOS)
    
    
    # 获取二维码的中心位置
    pos = ((img.size[0] - logo.size[0]) // 2, (img.size[1] - logo.size[1]) // 2)
    img.paste(logo, pos)  # 将Logo粘贴到二维码的中心
    
    # 保存带Logo的二维码图像
    img.save("qrcode_with_logo.png")
    

    最终生成的图像如下所示:

    3. 彩蛋

    3.1 文件路径

    对于文件路径找不到图片的,可以采取如下几种方式

    一、检查文件路径

    确保 logo.png 文件确实存在于 F:\python_project\test\ 目录下

    logo = Image.open('F:\\python_project\\test\\logo.png')  # 使用绝对路径
    

    二、 使用相对路径

    如果 logo.png 文件存放在与脚本相同的目录中,可以使用相对路径:

    import os
    
    # 获取脚本所在的目录路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    
    # 拼接得到logo的完整路径
    logo_path = os.path.join(script_dir, 'logo.png')
    
    # 打开Logo图像
    logo = Image.open(logo_path)
    

    三、添加文件存在性检查

    在打开文件之前,可以先检查文件是否存在,避免抛出异常:

    import os
    
    logo_path = 'F:\\python_project\\test\\logo.png'
    
    if os.path.exists(logo_path):
        logo = Image.open(logo_path)  # 打开Logo图像
    else:
        print(f"Logo file not found at {logo_path}. Please check the file path.")
        # 处理没有找到文件的情况,例如退出程序或使用默认的logo
    

    方法 4: 确保文件名和后缀正确

    确认 logo.png 文件的后缀名和文件名是否正确,有时文件名中的空格、大小写或者后缀名可能导致找不到文件

    3.2 Image.LANCZOS

    在较新的版本的 PIL(Pillow)库中,Image.ANTIALIAS 已被弃用,并且被重命名为 Image.LANCZOS

    如果使用Image.ANTIALIAS ,会出现如下问题:

    需要将其代码替换如下:

    # 旧代码
    logo = logo.resize((basewidth, hsize), Image.ANTIALIAS)
    
    # 将Logo图像缩放到指定大小
    logo = logo.resize((basewidth, hsize), Image.LANCZOS)
    

    作者:码农研究僧

    物联沃分享整理
    物联沃-IOTWORD物联网 » 详细分析python中QRCode生成二维码的基本知识(附Demo)

    发表回复