[Python] 使用Python自定义生成二维码


收录专栏: [Python]

二维码是现在非常常用的一种信息存储和传递方式,我们可以通过扫描二维码来快速获取文本、链接、联系方式等多种信息。在 Python 中,我们可以使用 qrcode 库轻松生成二维码,并通过一些自定义样式让它变得更加个性化。

本文将详细介绍如何使用 Python 的 qrcode 库生成各种样式的二维码,并提供相关的代码示例和讲解。


目录

  1. 安装 qrcode 库
  2. 生成简单的二维码
  3. 生成自定义样式的二维码
  4. 生成带有链接的二维码
  5. 可莉的小创作

安装 qrcode 库

在生成二维码之前,我们首先需要安装 qrcode 库。你可以通过以下命令在终端或命令行中安装它:

pip install qrcode[pil]

注意:[pil] 是为了确保你同时安装了 Pillow 库,这是处理图像的必需库。

安装成功后,我们就可以开始使用 qrcode 生成二维码了。


生成简单的二维码

首先,我们先来看一下如何生成一个最基础的二维码。在这个例子中,我们将生成一个简单的二维码,并保存为图片文件。

import qrcode# 生成简单的二维码
img = qrcode.make('you are a pig.')
# 保存生成的二维码
img.save('test.png')

代码讲解

  • qrcode.make('you are a pig.'):使用 qrcode.make() 方法,直接生成了一个包含文本的二维码,文本内容是 "you are a pig"
  • img.save('test.png'):将生成的二维码图片保存为 test.png 文件。

生成的二维码将包含指定的文本信息,用户扫描二维码后可以看到 "you are a pig"


生成自定义样式的二维码

在生成二维码时,我们可以自定义二维码的样式,比如调整二维码的大小、设置不同的容错等级,甚至在二维码上嵌入 Logo 图像。下面是一个更加复杂的例子:

import qrcode
from PIL import Image# 定义要生成二维码的内容
data = "Hello, World!"# 创建QRCode对象并自定义设置
qr = qrcode.QRCode(version=1,  # 设置二维码的版本error_correction=qrcode.constants.ERROR_CORRECT_H,  # 设置错误纠正等级box_size=10,  # 每个小格子的大小border=4,  # 边框的宽度
)# 将数据添加到QRCode对象中
qr.add_data(data)
qr.make(fit=True)# 生成二维码图像并设置前景色和背景色
img = qr.make_image(fill_color="black", back_color="white")# 打开一个Logo图片并将其粘贴到二维码上
logo = Image.open("logo.png")# 获取二维码的尺寸
img_width, img_height = img.size
logo = logo.resize((img_width // 5, img_height // 5))  # 调整Logo的大小
logo_position = ((img_width - logo.size[0]) // 2, (img_height - logo.size[1]) // 2)# 将Logo粘贴到二维码的中央
img.paste(logo, logo_position)# 保存生成的二维码图像
img.save("custom_qrcode.png")# 显示生成的二维码图像
img.show()

代码讲解

  1. QRCode 对象的创建
    • version=1:指定二维码的大小,值越大,二维码的尺寸越大。version 取值范围为 1 到 40。
    • error_correction=qrcode.constants.ERROR_CORRECT_H:设置二维码的容错率,ERROR_CORRECT_H 表示最高等级,可以纠正约 30% 的错误。
    • box_size=10:设置二维码中每个小方格的大小,值越大,二维码越大。
    • border=4:设置二维码边框的厚度。
  2. 生成二维码
    • qr.add_data(data):将数据添加到 QRCode 对象中。
    • qr.make(fit=True):自动调整二维码大小以适应数据。
  3. 自定义图像
    • img.paste(logo, logo_position):将 Logo 粘贴到二维码的中间。

最终生成的二维码将包含指定内容,并嵌入一个 Logo 图像。你可以根据需要自定义前景色和背景色。


生成带有链接的二维码

二维码最常见的用法之一是将 URL 嵌入到二维码中,扫描二维码后可以自动跳转到某个网页。以下是如何生成带有链接的二维码:

import qrcode# 定义要生成二维码的链接
link = "https://www.example.com"# 创建QRCode对象
qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_Q,  # 设置错误纠正等级为 Q (约25%可修复)box_size=10,border=4,
)# 将链接添加到QRCode对象中
qr.add_data(link)
qr.make(fit=True)# 生成二维码图像
img = qr.make_image(fill_color="black", back_color="white")# 保存二维码
img.save("link_qrcode.png")# 显示二维码
img.show()

代码讲解

  • 链接嵌入:将 "https://www.example.com" 作为数据添加到二维码中,生成的二维码会包含该链接,用户扫描后会自动跳转到该网站。
  • 容错率设置ERROR_CORRECT_Q 设置二维码的容错率为 Q 级(约 25% 容错能力),即使二维码部分损坏,也可以正常读取链接。

Demo

接下来是一个创意实现,生成一个包含个人名片信息的二维码。我们将通过生成的二维码传递个人名片信息,如姓名、邮箱、电话等。

代码实现

import qrcode# 定义个人名片信息
vcard_data = """BEGIN:VCARD
VERSION:3.0
FN:Alice Smith
TEL:+1234567890
EMAIL:alice@example.com
END:VCARD"""# 创建QRCode对象
qr = qrcode.QRCode(version=2,error_correction=qrcode.constants.ERROR_CORRECT_M,  # 容错率中等box_size=10,border=4,
)# 将个人名片信息添加到QRCode对象中
qr.add_data(vcard_data)
qr.make(fit=True)# 生成二维码图像
img = qr.make_image(fill_color="black", back_color="white")# 保存二维码
img.save("vcard_qrcode.png")# 显示二维码
img.show()

代码讲解

  • 个人名片信息:我们使用 vCard 格式嵌入名片信息,名片信息包括姓名(FN)、电话号码(TEL)和电子邮件(EMAIL)。
  • 生成二维码:二维码生成后,用户扫描该二维码时,可以快速保存名片信息到手机中。

总结

通过本文的学习,你应该掌握了如何使用 Python 的 qrcode 库生成各种二维码,包括简单的文本二维码、带有自定义样式和 Logo 的二维码,以及嵌入链接或名片信息的二维码。

生成二维码的过程非常简单,qrcode 库提供了强大的功能,可以轻松自定义二维码的大小、容错率、颜色等。同时,你还可以使用 Pillow 库在二维码中嵌入 Logo 图像,使二维码更加个性化。

通过本文中的代码示例,你可以生成自己的二维码并将其应用到日常开发中。无论是分享网址、嵌入名片信息还是创建个性化二维码,你都可以轻松实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443167.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在测试中模拟请求和响应?

在日常开发中,除了在服务器端进行单元测试之外,还经常需要做集成测试,为了能更好地做一些边界测试,我们常常需要mock一些HTTP请求或者响应,今天我们就来聊聊几种常见的方式。 服务器端设置 在开发中,我们…

车辆路径规划问题(VRP)优化方案

车辆路径规划问题(VRP)优化方案 车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域中一个经典的组合优化问题,目标是在满足客户需求的情况下,找到一组车辆的最优配送路径,以最小化总的…

C/C++复习(一)

1.sizeof 关于sizeof我们是经常使用的,所以使用方法就不需要提及了,这里我们需要注意的是,sizeof 后面如果是表达式可以不用括号,并且sizeof实际上不参与运算,返回的是内容的类型大小(size_t类型&#xff0…

CDN绕过学习

1.什么是CDN? CDN就是分布在各个地区的服务器,这些服务器储存着数据的副本。 哪些服务器比较接近你,当你发起请求时,提前就会快速为你提供服务。 总结来说就是: 其实就是用来加速访问的,以及缓解压力&a…

提示工程、微调和 RAG

自众多大型语言模型(LLM)和高级对话模型发布以来,人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望,而另一些方法则侧重于增强我们查询 LLM 的方式,以提…

1. Keepalived概念和作用

1.keepalived概念 (1)解决单点故障(组件免费) (2)可以实现高可用HA机制 (3)基于VRR协议(虚拟路由沉余协议) 2.keepalived双机主备原理

一入递归深似海,算法之美无止境

最近在刷leetcode hot100,在写二叉树中最大路径和的时候,看到了一个佬对递归的理解,深受启发,感觉自己对于递归的题又行了!!! 这里给大家分享一下(建立大家先去尝试一下这道题再来看 124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列,序列中每…

什么是PLM系统?PLM系统对制造业起到哪些作用?三品PLM系统对汽车制造业意义

在当今竞争激烈的制造业环境中,企业面临着来自市场、技术、客户需求等多方面的挑战。为了应对这些挑战,许多制造企业纷纷引入产品生命周期管理PLM系统,以实现更高效、更灵活的产品全生命周期管理。PLM系统以其独特的优势,在优化产…

智能猫砂盆怎么选购?cewey、鸟语花香、霍曼全方位测评性能大PK

智能猫砂盆怎么选购?cewey、鸟语花香、霍曼全方位测评性能大PK 现在的生活节奏越来越快,我们经常会外出不在家,这时候猫咪的粑粑就不能及时清理,会出现猫咪嫌猫砂盆脏乱拉,家里空气也会充满臭味。针对这个问题&#x…

Unity3d动画插件DoTween使用指南

1、DoTween是什么? DoTween是一款对象动画类插件,它是一款针对Unity 3D编辑器的、快速高效的、安全的、面向对象的补间动画引擎,并且对C#语言开发做出了很多的优化。另外,它使得开发者无需通过Unity内置的Animator或Coroutines即可…

【Chrome浏览器插件--资源嗅探猫抓】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、资源嗅探插件---猫抓二、使用步骤总结 一、资源嗅探插件—猫抓 猫抓是一个浏览器插件,可以检测当前网页中的一些资源文件,可设置嗅探的…

用KLineChart绘制股票行情K线图

用KLineChart绘制股票行情K线图 先看效果集成过程集成到系统 先看效果 用klinechart开源代码集成到系统中,展示的K线图效果。 集成过程 KlineChart源码地址: https://github.com/klinecharts/KLineChart KlineChart提供了多种行情分析指标 集成到…

OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目

Gateway微服务网关接口路由 各个服务之间已经能相互调用了 为什么需要网关 因为我们的不同服务是放在不同的端口上面的 如果前端调用服务 需要不同的端口 8101 8102 8103 8104 我们最好提供一个唯一的 给前端去调用的路径 我们学习技术的时候必须要去思考 1.为什么要用&am…

Python | Leetcode Python题解之第458题可怜的小猪

题目: 题解: class Solution:def poorPigs(self, buckets: int, minutesToDie: int, minutesToTest: int) -> int:if buckets 1:return 0combinations [[0] * (buckets 1) for _ in range(buckets 1)]combinations[0][0] 1iterations minutesT…

JavaSE——集合1:Collection接口(Iterator和增强for遍历集合)

目录 一、集合框架体系(重要) 二、集合引入 (一)集合的理解与好处 三、Collection接口 (一)Collection接口实现类的特点 (二)Collection接口常用方法 (三)Collection接口遍历元素的方式(Iterator和增强for) 1.使用Iterator(迭代器) 1.1Iterator(迭代器)介绍 1.2Itera…

[含文档+PPT+源码等]精品基于Nodejs实现的家教服务小程序的设计与实现

基于Node.js实现的家教服务小程序的设计与实现背景,主要源于以下几个方面: 一、家教市场的现状与需求 随着教育竞争的日益激烈,家庭对子女教育质量的重视程度不断提升,家教服务已成为许多家庭不可或缺的一部分。然而&#xff0c…

graphql--快速了解graphql特点

graphql--快速了解graphql特点 1.它的作用2.demo示例2.1依赖引入2.2定义schema2.3定义GrapQL端点2.4运行测试2.5一些坑 今天浏览博客时看到graphQL,之前在招聘网站上第一次接触,以为是图数据查询语言, 简单了解后,发现对graphQL的介绍主要是用作API的查询语言,不仅限于图数据查…

Meta 发布 Quest 3S 头显及 AR 眼镜原型:开启未来交互新视界

简介 在科技的浪潮中,Meta 始终站在创新的前沿,不断为我们带来令人惊叹的虚拟现实和增强现实体验。2024 年 10 月 6 日,让我们一同聚焦 Meta 最新发布的 Quest 3S 头显及 AR 眼镜原型(Orion),探索这两款产品…

自由学习记录(2)

Unity打包图集相关 Draw Call 实验设置: 我们将创建两个场景,一个场景有高 Draw Call,另一个场景通过优化减少 Draw Call。然后对比它们的帧率(FPS)。 场景 1:高 Draw Call 场景(无优化&…

【数据结构与算法-高阶】并查集

【数据结构与算法-高阶】并查集 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 🌼文章目录🌼 1. 并查集原理 2. 并查集实现 3. 并查集应用 1. 并查集原理 在一些应用问题中&…