用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)

在很多项目中,二维码作为一种便捷的方式传递信息越来越常见。今天,我们将介绍如何用 Python 编写一个功能更全的二维码生成工具,它不仅支持自定义二维码的颜色,还能在二维码中间添加 logo。

1. 环境准备

首先,我们需要安装 qrcodePillow 库,这两个库分别负责生成二维码和处理图像。你可以通过以下命令来安装这两个库:

pip install qrcode[pil]
pip install Pillow
2. 编写二维码生成工具

我们将在下面的代码中展示如何生成二维码。此工具不仅支持基本的二维码生成,还包括了以下功能:

  • 自定义二维码的颜色(前景色和背景色)。
  • 可以在二维码中间嵌入一个 logo 图标。
  • 支持设置二维码的尺寸和错误纠正级别。
    import qrcode
    from PIL import Image
    
    def generate_qr_code(data, logo_path=None, output_file="qrcode.png", version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, fg_color="black", bg_color="white"):
        # 创建二维码对象
        qr = qrcode.QRCode(
            version=version,  # 控制二维码的大小
            error_correction=error_correction,  # 错误纠正级别
            box_size=box_size,  # 每个“格子”的像素大小
            border=border,  # 边框宽度
        )
    
        # 将数据添加到二维码对象中
        qr.add_data(data)
        qr.make(fit=True)
    
        # 创建二维码的图像
        img = qr.make_image(fill=fg_color, back_color=bg_color)
    
        # 如果有 logo,合并 logo 到二维码中间
        if logo_path:
            try:
                logo = Image.open(logo_path)
                # 调整 logo 大小为二维码图像的 1/5
                logo_size = min(img.size) // 5
                logo = logo.resize((logo_size, logo_size))
    
                # 计算 logo 放置的位置
                logo_position = ((img.size[0] - logo.size[0]) // 2, (img.size[1] - logo.size[1]) // 2)
                img.paste(logo, logo_position, logo.convert("RGBA"))  # 如果 logo 有透明背景,保留透明度
            except Exception as e:
                print(f"Error loading logo: {e}")
    
        # 保存二维码图像
        img.save(output_file)
        print(f"二维码已生成并保存为 {output_file}")
    
    # 示例使用
    if __name__ == "__main__":
        data = "https://www.example.com"
        logo_path = "logo.png"  # 如果你不需要 logo,可以设置为 None
        generate_qr_code(
            data=data,
            logo_path=logo_path,  # 如果不想使用 logo,设置为 None
            output_file="custom_qrcode.png",
            version=5,
            error_correction=qrcode.constants.ERROR_CORRECT_H,  # 更高的纠错级别
            box_size=12,
            border=6,
            fg_color="blue",  # 设置前景色为蓝色
            bg_color="yellow"  # 设置背景色为黄色
        )
    
    3. 代码解释
    3.1 创建二维码对象
  • qr = qrcode.QRCode(
        version=1,  # 控制二维码的大小
        error_correction=qrcode.constants.ERROR_CORRECT_L,  # 错误纠正级别
        box_size=10,  # 每个“格子”的像素大小
        border=4,  # 边框宽度
    )
    

    QRCode 类用于创建一个二维码对象。其主要参数包括:

  • version:控制二维码的大小,1 是最小的,最高可以达到 40。
  • error_correction:二维码的错误纠正级别,决定二维码在损坏的情况下能恢复多少数据。ERROR_CORRECT_L 表示 7% 的错误可以恢复,其他级别包括 ERROR_CORRECT_M(15%)、ERROR_CORRECT_Q(25%)和 ERROR_CORRECT_H(30%)。
  • box_size:设置每个“盒子”的像素大小。
  • border:设置二维码的边框宽度,最小值为 4。
  • 3.2 添加数据并生成二维码图像
    qr.add_data(data)
    qr.make(fit=True)
    img = qr.make_image(fill=fg_color, back_color=bg_color)
    

  • qr.add_data(data):添加需要编码的数据(例如 URL 或文本)。
  • qr.make(fit=True):根据数据自动调整二维码的大小。
  • qr.make_image():生成二维码图像,可以通过 fillback_color 参数自定义前景色和背景色。
  • 3.3 添加 Logo

    如果传入了 logo 文件路径,程序会将 logo 添加到二维码的中央,并自动调整 logo 的大小以适应二维码。

    if logo_path:
        logo = Image.open(logo_path)
        logo = logo.resize((logo_size, logo_size))  # 调整 logo 大小
        logo_position = ((img.size[0] - logo.size[0]) // 2, (img.size[1] - logo.size[1]) // 2)
        img.paste(logo, logo_position, logo.convert("RGBA"))  # 保持透明度
    

    3.4 保存二维码

    img.save(output_file)
    

    最终,二维码图像会被保存为指定路径的 PNG 文件。

    4. 功能说明
  • 数据(data):需要编码的数据,例如 URL 或文本内容。
  • Logo(logo_path):二维码中间嵌入的 logo 图像(可选)。如果不需要 logo,可以将 logo_path 设置为 None
  • 二维码文件输出(output_file):二维码生成后保存的文件路径。
  • 二维码尺寸(version):调整二维码的大小,最大支持 version=40
  • 错误纠正级别(error_correction):提供四个级别的错误纠正:ERROR_CORRECT_L(最低纠正)、ERROR_CORRECT_MERROR_CORRECT_QERROR_CORRECT_H(最高纠正)。
  • 格子大小(box_size):每个“格子”的像素大小,调整二维码的细节。
  • 边框宽度(border):二维码的边框宽度,最小为 4。
  • 前景色(fg_color)和背景色(bg_color):自定义二维码的颜色。
  • 5. 总结

    本文介绍了如何使用 Python 和 qrcode 库生成功能丰富的二维码工具。你可以自定义二维码的颜色、大小、错误纠正级别,还可以在二维码中嵌入 logo。这个工具适合生成各种个性化的二维码,满足你不同场景的需求。

    结尾:样例小程序二维码,我自己做的一个免费好用的【随机选择决定转盘工具】小程序,欢迎扫码体验呦!

    谢谢阅读!~~

    作者:neter.asia

    物联沃分享整理
    物联沃-IOTWORD物联网 » 用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)

    发表回复