Python生成和识别二维码教程

引言

二维码(QR Code)在日常生活中非常常见,广泛应用于支付、登录验证、信息分享等场景。本文将介绍如何使用Python生成和识别二维码,适合初学者快速上手。我们将使用qrcodepyzbar库来实现这一功能。

环境准备

在开始之前,请确保您的Python环境已经安装了qrcodepyzbar库。如果没有安装,可以使用以下命令进行安装:

pip install qrcode[pil]
pip install pyzbar
pip install pillow

代码实现

以下是生成和识别二维码的完整代码:

#!/usr/bin/env python3
# coding:utf-8
import qrcode
from pyzbar.pyzbar import decode
from PIL import Image
import random

def Generate_QR_code():  # 生成二维码
    # 生成随机的20以内的数据计算题
    num1 = random.randint(1, 10)
    num2 = random.randint(1, 10)
    operators = ['+', '-', '*', '/']
    operator = random.choice(operators)

    if operator == '/':
       if num1 % num2 != 0:
           operator = random.choice(['+', '-', '*'])

    eval_operator = operator

    answer = int(eval(f"{num1} {eval_operator} {num2}"))

    data = f"{num1} {operator} {num2} = ?"
    if operator == '*':
        data = f"{num1} × {num2} = ?"

    print(f"计算题: {data}")
    print(f"答案: {answer}")

    # 创建一个QRCode对象
    qr = qrcode.QRCode(
        version=4,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=1,
    )
    # 添加数据
    qr.add_data(data.encode('utf-8'))
    qr.make(fit=True)

    # 创建图像并保存
    img = qr.make_image(fill_color="black", back_color="white")
    img.save("./qrcode.png")

def Identifying_QR_codes():  # 识别二维码
    # 打开图像文件
    img = Image.open('./qrcode.png')
    # 将图像转换为灰度
    img = img.convert('L')
    # 识别图像中的二维码
    barcodes = decode(img)
    # 输出识别结果
    for barcode in barcodes:
        barcodeData = barcode.data.decode("utf-8")
        print(barcodeData)

Generate_QR_code()
Identifying_QR_codes()

代码详解

生成二维码

Generate_QR_code函数用于生成二维码:

  1. 生成随机计算题:生成两个1到10之间的随机整数,并随机选择一个运算符。
  2. 计算答案:计算出随机生成的计算题的答案。
  3. 创建二维码:使用qrcode库创建二维码,并将计算题作为数据添加到二维码中。
  4. 保存二维码图像:将生成的二维码图像保存为qrcode.png文件。
识别二维码

Identifying_QR_codes函数用于识别二维码:

  1. 打开图像文件:打开保存的二维码图像文件qrcode.png
  2. 转换为灰度图像:将图像转换为灰度图像,便于识别。
  3. 识别二维码:使用pyzbar库识别二维码,并输出识别结果。

使用场景

二维码技术应用广泛,以下是几个常见的使用场景:

  1. 网站登录验证:通过扫描二维码登录,提升安全性和用户体验。
  2. 扫码挪车:在车辆挡道时,可以通过扫描车主留下的二维码联系车主。
  3. 信息分享:在名片或传单上印刷二维码,方便快速获取联系信息或网址。

示例

在这里插入图片描述

结论

本文介绍了如何使用Python生成和识别二维码的基础知识和实现方法,并给出了几个实际应用场景。希望通过本教程,您能掌握二维码生成和识别的基本技能,并将其应用到实际项目中。

欢迎在评论区留言讨论,分享您的学习心得和疑问。Happy Coding!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IT项目管理中如何沟通?

IT项目管理中的沟通是保证项目顺利进行的关键。以下是一些创意文案,用以强调和展示在IT项目管理中进行有效沟通的策略和重要性: 代码与文化的编织者:在IT项目管理中,沟通不仅需要技术的精准,更需要文化的融合&#xff…

Qt中用QLabel创建状态灯

首先ui设计中分别创建了4个大灯和4个小灯。 编辑.h文件 #ifndef LED_H #define LED_H#include <QWidget> #include <QLabel>QT_BEGIN_NAMESPACE namespace Ui { class Led; } QT_END_NAMESPACEclass Led : public QWidget {Q_OBJECTpublic:Led(QWidget *parent n…

苹果电脑文件清理软件哪个好 苹果电脑如何清理内存和垃圾文件 cleanMyMac X 4.8.0激活号码

苹果电脑一直以其出色的性能和优雅的设计吸引着无数忠实用户。然而&#xff0c;众所周知&#xff0c;随着时间的推移和使用的增加&#xff0c;您的Mac可能会开始变慢&#xff0c;就像任何高性能设备&#xff0c;长时间使用后总会积累些“灰尘”。但在苹果电脑上就不是真的灰尘哦…

Vite:打包时去除console

需求描述 在生产环境下&#xff0c;Vite打包项目时&#xff0c;需要去除开发时加入的console、debugger调试信息&#xff0c;但是又不想引入terser。 解决方案 esbuild 参考&#xff1a; esbuild - API 修改配置 修改vite.config.js配置文件&#xff0c;新增配置项如下&…

6. 较全的Open3D点云数据处理(python)

注意&#xff1a;以下内容来自博客爆肝5万字❤️Open3D 点云数据处理基础&#xff08;Python版&#xff09;_python 点云 焊缝-CSDN博客&#xff0c;这篇博客写的全且详细&#xff0c;在这里是为了记笔记方便查看&#xff0c;并非抄袭。 1.点云的读写 代码如下&#xff1a; …

SQL33 找出每个学校GPA最低的同学 解法详解

题目截图&#xff1a; 建表代码&#xff1a; drop table if exists user_profile; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar(14) NOT NULL, age int , university varchar(32) NOT NULL, gpa float, active_days_within_30 int…

一次进程虚拟内存占用超过200G问题分析

在对智驾软件系统资源进行分析时&#xff0c;发现一个进程虚存占用过高&#xff0c;超过200G top查看内存占用 有一个node应用占用了200G的虚拟内存 pmap查看该进程内存情况 pmap -x -p 8496结果显示有两个异常点&#xff0c;刚好和虚存使用总量吻合 一个50G和一个170G的堆…

什么是BIOS,如何进入BIOS设置?

什么是BIOS&#xff0c;如何进入BIOS设置&#xff1f;标题 &#x1f5a5;️ 什么是BIOS&#xff0c;如何进入BIOS设置&#xff1f;——默语的深入解析摘要引言正文内容&#x1f9e9; 什么是BIOS&#xff1f;&#x1f527; 如何进入BIOS设置&#xff1f;⚙️ 常见的BIOS设置选项…

将json对象转为xml进行操作属性

将json对象转为xml进行操作属性 文章目录 将json对象转为xml进行操作属性前端发送json数据格式写入数据库格式-content字段存储&#xff08;varchar(2000)&#xff09;Question实体类-接口映射对象QuestionContent 接收参数对象DAO持久层Mapper层Service层Controller控制层接收…

6月26日-时间记录和统计

首先&#xff0c;我们根据你提供的时间记录&#xff0c;将活动进行分类并计算每个类别的持续时间&#xff0c;然后计算它们各自所占的百分比。以下是具体的分类和计算步骤&#xff1a; 1. **思想活动**&#xff1a; - 持续时间&#xff1a;15分48秒 2. **学习活动**&#xff1a…

Java代码基础算法练习-计算看完一本书的天数-2024.06.29

任务描述&#xff1a; 一本书有 n 页&#xff0c;小明第一天看 1 页&#xff0c;以后每天都比前一天多看 2 页&#xff0c;计算小明看完整本书 需要多少天&#xff1f; 解决思路&#xff1a; 每天都比前一天多看 2 页&#xff0c;输入的页数 n 为判断标准&#xff0c;while 循…

堆排序思想分享

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

SAP ATP可用性检查简介

Availability Check,就是可用性检查,指的是要检查一下此物料是否能满足我的需求。 接到一张销售订单(SALES ORDER),客户要求数量为100PC,并且客户要求的出货日期是2024-07-01,此时我们的销售人员肯定会想到底能否出货给客人呢?系统中建立此单时,SAP就会做一个所谓的检…

一键掌控,文件格式转换无忧!轻松驾驭各种文件格式,高效管理您的数字世界

信息爆炸的时代&#xff0c;我们每天都会接触到各种各样的文件格式。无论是工作文档、图片、视频还是音频文件&#xff0c;它们都以不同的格式存在于我们的电脑和移动设备中。然而&#xff0c;不同的软件和应用往往只支持特定的文件格式&#xff0c;这给我们的工作和生活带来了…

Petal-X :心血管疾病临床风险可视化工具

心血管疾病&#xff08;Cardiovascular diseases, CVDs&#xff09;是全球致死的首要原因&#xff0c;但在大多数情况下&#xff0c;它们是可以通过行为干预来预防的。因此&#xff0c;在个体层面上&#xff0c;有效地传达心血管疾病的风险以及通过风险因素的修改来预计风险降低…

【股指期权投教】一手股指期权大概多少钱?

一手股指期权的权利金大概在几千人民币左右&#xff0c;如果是作为期权卖方还需要另外缴纳保证金的。国内的股指期权有三种&#xff0c;沪深300、上证50、中证1000股指期权&#xff0c;每点合约人民币100 元。 期权合约的价值计算可以通过此公式得出&#xff1a;权利金的支付或…

一块KT板带来4.9万MGV,抖捧AI自动直播真有这么好?

相信大多数做抖音本地生活的朋友都了解&#xff0c;目前本地生活团购带货的方式主要分为两种&#xff0c;一种是短视频带货&#xff0c;由探店达人到店里打卡&#xff0c;然后拍视频发布到自己账号&#xff0c;同时挂载商家的门店定位或团购链接&#xff0c;用户可以直接在视频…

awk的用法

目录 awk简述 awk的用法 选项 内置变量 命令格式 打印行号 打印指定行 打印奇偶行 按行取列 BEGIN打印模式 乘法计算 awk -v 变量赋值 awk的条件判断 面试题awk的三元表达式 awk的精确筛选 逻辑且、或关系 awk做小数运算 curl 练习 1.获取其中的所有子域名…

WebSocket 连接失败的原因及解决方法

WebSocket 目前已经成为了一项极为重要的技术&#xff0c;其允许客户端和服务器之间进行实时、全双工的通信。然而&#xff0c;在实际项目中&#xff0c;开发者时常会遇到 WebSocket 连接失败的情况。这不仅影响了用户体验&#xff0c;还可能导致不可预见的系统错误或数据丢失。…

字节码编程ASM之插桩调用其他类的静态方法

写在前面 源码 。 本文看下通过ASM如何实现插桩调用其他类的静态方法。 1&#xff1a;编码 假定有如下的类&#xff1a; public class PayController {public void pay(int userId, int payAmount) {System.out.println("用户&#xff1a;" userId ", 调用…