详细分析python中QRCode生成二维码的基本知识(附Demo)

news2024/11/15 19:24:42

目录

  • 前言
  • 1. 基本知识
  • 2. Demo
  • 3. 彩蛋
    • 3.1 文件路径
    • 3.2 Image.LANCZOS

前言

以下主要利用python中的QRCode来生成二维码的基本知识

1. 基本知识

简单易用,并且可以生成高质量的二维码图像

支持多种自定义设置,例如二维码的大小、边框、容错级别、颜色等

先安装:pip install qrcode[pil],[pil] 选项会安装 Pillow,这个库用于处理图像,是生成二维码图像时必需的依赖项
在这里插入图片描述

核心的API如下所示:

基本的QRCode类如下:

  • version:控制二维码的大小(1 到 40),数字越大,二维码尺寸越大。默认为 1
  • error_correction:设置容错等级,支持以下选项:
    ERROR_CORRECT_L:7% 的字节数据可以被修正
    ERROR_CORRECT_M:15% 的字节数据可以被修正
    ERROR_CORRECT_Q:25% 的字节数据可以被修正
    ERROR_CORRECT_H:30% 的字节数据可以被修正
  • box_size:控制二维码中每个点的大小(像素)
  • border:边框的宽度,以盒子的数量表示(box_size 的倍数)

还有其他的几个API:

API描述
QRCode.add_data(data)将数据添加到二维码对象中。data可以是字符串、URL 或其他可编码的数据
QRCode.make(fit=True)根据数据自动调整二维码的大小
QRCode.make_image(fill_color=“black”, back_color=“white”)生成二维码图像,fill_color设置二维码前景色,back_color设置背景色
QRCode.save() 和 QRCode.show()分别用于保存和显示生成的二维码图像

2. Demo

简单的Demo如下:

import qrcode

img = qrcode.make('manong')
img.save('test.png')

简单文本二维码:

import qrcode

# 创建一个简单的二维码
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)

# 添加数据到二维码
qr.add_data("Hello, World!")
qr.make(fit=True)

# 生成二维码图像
img = qr.make_image(fill_color="black", back_color="white")

# 保存图像
img.save("hello_world_qr.png")

# 显示图像
img.show()

带有url二维码:

import qrcode

# 生成一个包含URL的二维码
url = "https://blog.csdn.net/weixin_47872288"
qr = qrcode.make(url)

# 保存二维码
qr.save("url_qr.png")

# 显示二维码
qr.show()

自定义二维码颜色:

import qrcode

# 创建一个自定义颜色的二维码
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=4,
)

qr.add_data("Colorful QR Code")
qr.make(fit=True)

# 生成带有自定义颜色的二维码
img = qr.make_image(fill_color="blue", back_color="yellow")

# 保存图像
img.save("colorful_qr.png")

# 显示图像
img.show()

整体复杂Demo如下:

import qrcode
from PIL import Image

# 创建QRCode对象并设置版本、容错等级和边框大小
qr = qrcode.QRCode(
    version=1,  # 版本控制二维码的大小。1表示21x21的矩阵。
    error_correction=qrcode.constants.ERROR_CORRECT_L,  # 容错等级,L表示7%的字节数据可以被修正。
    box_size=10,  # 控制二维码中每个点的大小(像素)。
    border=4,  # 边框的宽度,单位是盒子的数量(box_size的倍数)。
)

# 添加数据到QRCode对象
data = "https://blog.csdn.net/weixin_47872288"
qr.add_data(data)
qr.make(fit=True)  # 自动调整二维码大小以适应数据

# 生成二维码图像
img = qr.make_image(fill_color="black", back_color="white")

# 保存二维码图像到文件
img.save("qrcode.png")

# 显示二维码图像
img.show()

# 如果你希望在二维码上叠加一个小图标,如Logo:
logo = Image.open('logo.png')  # 打开Logo图像
basewidth = 50  # 设置Logo的宽度
wpercent = (basewidth / float(logo.size[0]))
hsize = int((float(logo.size[1]) * float(wpercent)))
# 将Logo图像缩放到指定大小
logo = logo.resize((basewidth, hsize), Image.LANCZOS)


# 获取二维码的中心位置
pos = ((img.size[0] - logo.size[0]) // 2, (img.size[1] - logo.size[1]) // 2)
img.paste(logo, pos)  # 将Logo粘贴到二维码的中心

# 保存带Logo的二维码图像
img.save("qrcode_with_logo.png")

最终生成的图像如下所示:

在这里插入图片描述

3. 彩蛋

3.1 文件路径

对于文件路径找不到图片的,可以采取如下几种方式

一、检查文件路径

确保 logo.png 文件确实存在于 F:\python_project\test\ 目录下

logo = Image.open('F:\\python_project\\test\\logo.png')  # 使用绝对路径

二、 使用相对路径

如果 logo.png 文件存放在与脚本相同的目录中,可以使用相对路径:

import os

# 获取脚本所在的目录路径
script_dir = os.path.dirname(os.path.abspath(__file__))

# 拼接得到logo的完整路径
logo_path = os.path.join(script_dir, 'logo.png')

# 打开Logo图像
logo = Image.open(logo_path)

三、添加文件存在性检查

在打开文件之前,可以先检查文件是否存在,避免抛出异常:

import os

logo_path = 'F:\\python_project\\test\\logo.png'

if os.path.exists(logo_path):
    logo = Image.open(logo_path)  # 打开Logo图像
else:
    print(f"Logo file not found at {logo_path}. Please check the file path.")
    # 处理没有找到文件的情况,例如退出程序或使用默认的logo

方法 4: 确保文件名和后缀正确

确认 logo.png 文件的后缀名和文件名是否正确,有时文件名中的空格、大小写或者后缀名可能导致找不到文件

3.2 Image.LANCZOS

在较新的版本的 PIL(Pillow)库中,Image.ANTIALIAS 已被弃用,并且被重命名为 Image.LANCZOS

如果使用Image.ANTIALIAS ,会出现如下问题:

在这里插入图片描述

需要将其代码替换如下:

# 旧代码
logo = logo.resize((basewidth, hsize), Image.ANTIALIAS)

# 将Logo图像缩放到指定大小
logo = logo.resize((basewidth, hsize), Image.LANCZOS)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java在项目中实现excel导入导出

一、初识EasyExcel* 1. Apache POI 先说POI,有过报表导入导出经验的同学,应该听过或者使用。 Apache POI是Apache软件基金会的开源函式库,提供跨平台的Java API实现Microsoft Office格式档案读写。但是存在如下一些问题: 1.1 …

C语言阴阳迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> enum WASD {W…

【传输层协议】TCP协议(上) {TCP协议段格式;确认应答机制;超时重传机制;连接管理机制:三次握手、四次挥手}

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;用于在网络上可靠地传输数据。TCP是互联网协议套件&#xff08;TCP/IP&#xff09;中的一个主要协议&#xff0c;它在IP&#xff08;Internet Protocol…

基于STM32开发的智能恒温系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化温度检测与恒温控制OLED显示与状态提示Wi-Fi通信与远程监控应用场景 家庭环境的智能恒温管理实验室或工业环境的精确温度控制常见问题及解决方案 常见问题解决方案结论 1. 引言 智…

VIVADO自定义 IP封装

简介 本章节主要针对VIVAO 2020.2版本做IP自定义封装&#xff0c;其中涉及到IP寄存器读写配置&#xff0c;自定义接口封装等介绍。 IP封装 IP标准自定义步骤一般有创建工程&#xff0c;封装IP&#xff0c;自定义内容&#xff0c;添加自定义库这4个步骤&#xff0c;下面…

探秘紫白洋桔梗花语:勇气、爱情、希望与清晰的象征解读

在缤纷多彩的花卉世界中&#xff0c;紫白洋桔梗宛如一位神秘而优雅的仙子&#xff0c;悄然绽放着独特的魅力。它那淡雅的色彩与别致的花形&#xff0c;令人一见倾心&#xff0c;而其背后蕴含的丰富花语&#xff0c;更是如同隐藏的宝藏一般&#xff0c;等待着我们去细细探寻与解…

蓝花楹花语探秘:从宁静忧郁到等待爱情的深刻寓意

在时光的长河中&#xff0c;有一种花朵宛如梦幻的精灵&#xff0c;每当它绽放之时&#xff0c;那一片绚烂的蓝紫色便如同璀璨的星空倾洒人间&#xff0c;它就是蓝花楹。蓝花楹那独特的身姿和醉人的色彩&#xff0c;仿佛自带一种神秘的魔力&#xff0c;吸引着无数人驻足凝望。而…

vue3+ts+vite+electron+electron-store+electron-builder打包可安装包

yarn create vite yarn add electron yarn add electron-store yarn add electron-builder 新增main.js、preload.js // main.js const { app, BrowserWindow, ipcMain, globalShortcut } require(electron) const path require(path) let store // 我们将在稍后动态导入 el…

Flink优化之--旁路缓存和异步IO

Apache Flink 是一个开源流处理框架&#xff0c;以其高吞吐量、低延迟和事件驱动的处理能力著称。随着大数据和实时处理需求的不断增加&#xff0c;Flink 在许多行业和应用场景中得到了广泛应用&#xff0c;如金融风控、物联网数据处理、实时数据分析等。然而&#xff0c;随着数…

如何学习Linux性能优化?

你是否也曾跟我一样&#xff0c;看了很多书、学了很多Linux性能工具&#xff0c;但在面对Linux性能问题时&#xff0c;还是束手无策&#xff1f;实际上&#xff0c;性能分析和优化始终是大多数软件工程师的一个痛点。但是&#xff0c;面对难题&#xff0c;我们真的就无解了吗&a…

2.11键盘事件

目录 实验原理 实验代码 实验结果 实验原理 简单、常用的键盘事件是等待按键事件&#xff0c;它由 waitKey 函数来实现。无论是刚开始学习 OpenCV&#xff0c;还是使用 OpenCV 进行开发调试&#xff0c;都可以看到waitKey 函数的身影&#xff0c;然而基础的东西往往容易忽略…

[Java]MyBatis轻松拿下

介绍 在业务开发过程中, 都是使用java程序完成数据库的操作, 目前最主流的技术就是MyBatis MyBatis是一款优秀的 持久层 框架&#xff0c;用于简化JDBC的开发。 官网: https://mybatis.org/mybatis-3/zh/index.htmlmybatis是Apache的一个开源项目iBatis, 2010年迁移到了googl…

Day00_场景题

文章目录 资料项目经历技能清单自我介绍QPS和TPS?如何设计一个排行榜的功能?如何解决大文件上传问题延时任务处理场景如何设计一个秒杀系统?分布式幂等性如何设计?如果你的系统的QPS 突然提升10倍你会怎么设计?如何从零搭建 10 万级QPS 大流量、高并发优惠券系统?高 QPS,…

OpenCV绘图函数(9)填充多边形函数fillPoly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 填充一个或多个多边形轮廓所包围的区域。 函数 cv::fillPoly 填充由若干个多边形轮廓所包围的区域。该函数可以填充复杂的区域&#xff0c;例如带…

【大模型】GPT系列模型基础

前言&#xff1a;GPT整体上与transformer结构相似&#xff0c;但只用了decoder部分。 目录 1. GPT2. GPT23. GPT34. 知识补充4.1 下游任务实现方式4.2 sparse attention 1. GPT 预训练&#xff1a;无监督&#xff0c;根据前k个词预测下一个词的概率。微调&#xff1a; 有监督&a…

AI嵌入式人工智能开发 --- 【1】初始RKNPU

目录 一、NPU的由来 二、RKNPU介绍 三、RKNPU单核框架 3.1 AHB/AXI 接口 3.2 卷积神经网络加速单元&#xff08;CNA&#xff09; 3.3 数据处理单元&#xff08;Data Processing Unit&#xff0c;DPU&#xff09; 3.4 平面处理单元&#xff08;Planar Processing Unit&a…

#驱动开发

内核模块 字符设备驱动 中断、内核定时器 裸机开发和驱动开发的区别&#xff1f; 裸机开发 驱动开发&#xff08;基于内核&#xff09; 相同点 都能够控制硬件&#xff08;本质&#xff1a;操作寄存器&#xff09; 不同点 用C语言给对应的地址里面写值 按照一定的框架格式…

【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台

DSP FPGA 协同处理架构板载 1 个TMS320C6678 多核DSP处理节点板载 1 片 XC7K325T FPGA处理节点板载 1 个FMC 接口板载4路SFP光纤接口FPGA 与 DSP 之间采用高速Rapid IO互联 基于FPGA与DSP协同处理架构的通用高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多…

CSS3 文本效果(text-shadow,box-shadow,white-space等)

一 text-shadow text-shadow 属性是 CSS3 中用于为文本添加阴影效果的工具。它可以增强文本的可读性和视觉吸引力&#xff0c;提供丰富的视觉效果 1 语法 text-shadow: offset-x offset-y blur-radius color;offset-x&#xff1a;阴影相对于文本的水平偏移量。可以是正值&am…

c/c++: function和procedure的区别

https://www.cs.nthu.edu.tw/~ychung/slides/CSC4180/Alfred%20V.%20Aho,%20Monica%20S.%20Lam,%20Ravi%20Sethi,%20Jeffrey%20D.%20Ullman-Compilers%20-%20Principles,%20Techniques,%20and%20Tools-Pearson_Addison%20Wesley%20(2006).pdf 函数与过程的区别&#xff0c;一个…