当前位置: 首页 > news >正文

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

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

1. 环境准备

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

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

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

  • 自定义二维码的颜色(前景色和背景色)。
  • 可以在二维码中间嵌入一个 logo 图标。
  • 支持设置二维码的尺寸和错误纠正级别。
    import qrcode
    from PIL import Imagedef 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/5logo_size = min(img.size) // 5logo = 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,可以设置为 Nonegenerate_qr_code(data=data,logo_path=logo_path,  # 如果不想使用 logo,设置为 Noneoutput_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。这个工具适合生成各种个性化的二维码,满足你不同场景的需求。

  结尾:样例小程序二维码,自己做的一个免费好用的排班小程序

http://www.lryc.cn/news/511229.html

相关文章:

  • RTX5 数据队列传输流程
  • 24.try块怎么用 C#例子
  • 【机器学习 | 数据挖掘】智能推荐算法
  • 120.【C语言】数据结构之快速排序(详解Hoare排序算法)
  • uniapp通过v-if进行判断时,会出现闪屏?【已解决】
  • 各种网站(学习资源、常用工具及其他,持续更新中~)
  • 网络技术-QoS策略以及如何定义 流分类,流行为,流策略
  • 线程晨考day20
  • 【ES6复习笔记】迭代器(10)
  • MySQL的TIMESTAMP类型字段非空和默认值属性的影响
  • 【Linux进程】初悉进程
  • Python学习之路(5)— 使用C扩展
  • 动态规划34:446. 等差数列划分 II - 子序列
  • PPT画图——如何设置导致图片为600dpi
  • 【模块系列】STM321.69TFT屏幕
  • 大模型辅助测试的正确打开方式?
  • 三相电的相电压、线电压、额定值、有效值,变比,零序电压,零序电流,三相三线制的三角形连接,三相四线制的星形连接
  • 电商网站的基础用户数在100万,日活跃用户数在1万左右,系统下单TPS最大支持1000,应用服务要保证高可用。请预估该网站每天的使用成本。
  • 线性代数期末总复习的点点滴滴(1)
  • python+reportlab创建PDF文件
  • 2024最新qrcode.min.js生成二维码Demo
  • 【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局
  • Github - 如何提交一个带有“verified”标识的commit
  • HCIA笔记9--NAT、ACL与链路聚合
  • SCSA:探索空间与通道注意力之间的协同效应
  • 深度学习助力股市预测:LSTM、RNN和CNN模型实战解析
  • 组件库TDesign的表格<t-table>的使用,行列合并以及嵌入插槽实现图标展示,附踩坑
  • jwt在express中token的加密解密实现方法
  • 结构体、共用体的字节对齐
  • 【YOLOv3】源码(train.py)