用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)
在很多项目中,二维码作为一种便捷的方式传递信息越来越常见。今天,我们将介绍如何用 Python 编写一个功能更全的二维码生成工具,它不仅支持自定义二维码的颜色,还能在二维码中间添加 logo。
1. 环境准备
首先,我们需要安装 qrcode
和 Pillow
库,这两个库分别负责生成二维码和处理图像。你可以通过以下命令来安装这两个库:
pip install qrcode[pil]
pip install Pillow
2. 编写二维码生成工具
我们将在下面的代码中展示如何生成二维码。此工具不仅支持基本的二维码生成,还包括了以下功能:
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()
:生成二维码图像,可以通过 fill
和 back_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. 功能说明
logo_path
设置为 None
。version=40
。ERROR_CORRECT_L
(最低纠正)、ERROR_CORRECT_M
、ERROR_CORRECT_Q
、ERROR_CORRECT_H
(最高纠正)。5. 总结
本文介绍了如何使用 Python 和 qrcode
库生成功能丰富的二维码工具。你可以自定义二维码的颜色、大小、错误纠正级别,还可以在二维码中嵌入 logo。这个工具适合生成各种个性化的二维码,满足你不同场景的需求。
结尾:样例小程序二维码,我自己做的一个免费好用的【随机选择决定转盘工具】小程序,欢迎扫码体验呦!
谢谢阅读!~~
作者:neter.asia