Python学习之生成带logo背景图的二维码(静态和动态图)

news2025/1/19 14:37:20

前言

二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明。现随着智能手机的普及,已广泛应用于平常生活中,例如商品信息查询、社交好友互动、网络地址访问等等。

尽管二维码应用渐趋广泛,但与日韩等国相比,中国的二维码发展还远远不够。制约因素除了运营商的支持度外,还有技术、终端适配、盈利模式等方面。炒得很火热的是二维码与O2O(Online To Offline)模式的结合,即利用二维码的读取将线上的用户引流给线下的商家。腾讯很看好这个模式,马化腾称"二维码是线上线下的一个关键入口"。尽管有些人不看好二维码的应用,但无可否认,只要培养了足够多的用户群,再结合良好的商业模式,二维码将成为桥接现实与虚拟最得力的工具之一。

Python代码是怎么生成二维码的

这里介绍两种方法:

1、qrcode模块

qrcode模块是Github上的一个开源项目,提供了生成二维码的接口。qrcode默认使用PIL库用于生成图像。由于生成 qrcode 图片需要依赖 Python 的图像库,所以需要先安装 Python 图像库 PIL(Python Imaging Library)。

2、MyQR模块

MyQR是一个能够产生基本二维码、艺术二维码(黑白与彩色)和动态效果二维码(黑白与彩色)的Python第三方库。
MyQR 库的更多介绍和源码访问 ​​ ​https://github.com/x-hw/amazing-qr

模块安装问题

运行代码报错:ModuleNotFoundError: No module named ‘MyQR’

pip install MyQR

在这里插入图片描述

qrcode模块生成的二维码

在这里插入图片描述

注意:logo图不要
太大,不然生成之后logo可能会挡住二维码的内容,导致扫不出来。

下面看实现代码:

from PIL import Image
import qrcode, os

def create_qrcode(url, qrcodename):
    qr = qrcode.QRCode(
        version=1,  # 设置容错率为最高
        error_correction=qrcode.ERROR_CORRECT_H,  # 用于控制二维码的错误纠正程度
        box_size=8,  # 控制二维码中每个格子的像素数,默认为10
        border=1,  # 二维码四周留白,包含的格子数,默认为4
    )

    qr.add_data(url)  # QRCode.add_data(data)函数添加数据
    qr.make(fit=True)  # QRCode.make(fit=True)函数生成图片

    img = qr.make_image()
    img = img.convert("RGBA")  # 二维码设为彩色
    logo = Image.open("images/逃逸的卡路里.png")  # 传gif生成的二维码也是没有动态效果的

    w,h = img.size
    logo_w,logo_h = logo.size
    l_w = int((w - logo_w) / 2)
    l_h = int((h - logo_h) / 2)
    logo = logo.convert("RGBA")
    img.paste(logo, (l_w, l_h), logo)
    img.show()
    img.save(os.getcwd() + "/images/" + qrcodename + ".png", quality=100)

def main():
    url = input("请输入文本或URL:")
    qrcodename = input("请输入生成二维码的名称:")
    create_qrcode(url,qrcodename)
if __name__ == '__main__':
    main()
参数详解:
version=None一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可
error_correction=constants.ERROR_CORRECT_M二维码的纠错范围,可以选择4个常量:1. ERROR_CORRECT_L 7%以下的错误会被纠正2. ERROR_CORRECT_M (default) 15%以下的错误会被纠正3. ERROR_CORRECT_Q 25 %以下的错误会被纠正4. ERROR_CORRECT_H. 30%以下的错误会被纠正
box_size=10控制二维码中每个小格子包含的像素数
border=4控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)
image_factory=None选择生成图片的形式,默认为PIL图像
mask_pattern=None选择生成图片的的掩模

效果图展示:

在这里插入图片描述

MyQR模块生成静态或动态背景的二维码

代码示例:

from MyQR import myqr
import os

text = input("请输入文本或url:")
save_name = input("请输入生成二维码的名称:")+".png"

myqr.run(
    words=text, #在命令后输入链接或者句子作为参数,然后在程序的当前目录中产生相应的二维码图片文件,默认命名为” qrcode.png“
    version=1,  #设置容错率为最高默认边长是取决于你输入的信息的长度和使用的纠错等级;而默认纠错等级是最高级的H
    level='H',  #控制纠错水平,范围是L、M、Q、H,从左到右依次升高
    picture="images/逃逸的卡路里.png",  #用来将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片
    colorized=True, #可以使产生的图片由黑白(False)变为彩色(True)的
    contrast=1.0, #用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。
    brightness=1.0, #用来调节图片的亮度,其余用法和取值与 -con 相同
    save_name=save_name,    #控制文件名,格式可以是 .jpg, .png ,.bmp ,.gif ;
    save_dir=os.getcwd() + "/images/"
)

参数:

words:文本或链接
version:改变生成二维码图片的大小;范围(1~40)
picture: 指定生成二维码的背景图
colorized:只有两个参数,True为彩色,Flase为灰色
level :范围只有:‘L’,‘M’,‘Q’,‘H’;控制纠错水平
contrast :调节背景图片的对比度,只能给予float类型的参数
brightness:调节背景图片的亮度,如果参数值过大,背景图将会变为白色;只能给予float类型的参数
save_name:保存的格式只有:’.jpg’,‘.png’, ‘.bmp’, '.gif’等四种格式,路径可以使用绝对路径和相对路径。
save_dir:存储路径

静态图展示

在这里插入图片描述

动态图展示

在这里插入图片描述

在这里插入图片描述

总结

以上就是Python代码对二维码生成处理的示例,根据不同需求可以选择qrcode模块或者MyQR模块来实现,希望对看到的小伙伴有帮助作用。

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

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

相关文章

探索三维世界【4】:Three.js dat.gui gsap 的使用

探索三维世界【4】:Three.js & dat.gui & gsap 的使用 1、dat.gui是什么?2、gsap的介绍与使用2.1、前提准备工作(绘制一个BoxGeometry)2.2、安装引入gsap动画库2.3、使用gsap动画2.4、配合事件使用 3、使用dat.gui3.1、添…

生物信息学知识点

生物信息学知识点 1. 序列比对:1.1 基本概念:1.2 全局比对和局部比对:1.3 空位罚分的改进:1.4 同源性和相似性:1.5 相似性矩阵:1.5.1 PAM:1.5.2 BLOSUM: 2. BLAST算法:2.…

React | React的过渡动画

✨ 个人主页:CoderHing 🖥️ React.js专栏:React的过渡动画 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

Grafana之Clock Panel使用(06)

Clock Panel可以用来显示当前(各国)时间或用于倒计时,并支持每秒更新一次。 Clock plugin for Grafana | Grafana Labs Clock Panel也是Grafana Labs提供,但并非Native,需自行安装,安装命令如下: # grafana-cli plugins install grafana-clock-panel # systemctl …

前端面试题 — — vue篇

前端面试笔记之vue篇 前言1.数据双向绑定原理⭐⭐⭐2. VUE生命周期⭐⭐⭐3.组件之间如何传值⭐⭐⭐4.路由之间如何传参⭐5.谈一谈VUEX⭐⭐6.如何解决VUEX页面刷新数据丢失问题?⭐⭐7.computed和watch的区别?⭐⭐⭐8.如何封装axios?⭐9.Route和…

APP和小程序共同塑造现代化政务服务

随着移动互联网的飞速发展,政务服务也开始向移动端转移,政务App和小程序结合,可以使政府更好地实现数字化转型和提供优质的政务服务。本文将探讨政务App和小程序的结合优势,以及如何推进政务App和小程序的发展。 移动政务服务应用…

RTSP/RTP on TCP 协议抓包记录

仅做记录,无他。 RTSP OPTIONS 客户端发送: 服务端响应 RTSP DESCRIBE 客户端发送 服务端响应 RTSP SETTUP 客户端发送请求 服务端响应 RTSP PLAY 客户端发送请求 服务端响应 RTP包 这个比较复杂,得好好解析&#xff0…

Git 解决missing Change-Id in message footer

ERROR: commit b007456: missing Change-Id in message footer 无论是linux 还是 window 出现这个,提示都是一样的,按照提示执行就好,网上基本都是这么说的,有的基本都是抄来抄去。 window 遇到这个问题解决步䠫: …

数学天才陶哲轩主持白宫生成式AI工作组,李飞飞、Hassabis发表演讲

夕小瑶科技说 分享 来源 | 新智元 最近,「数学天才」陶哲轩表示,自己将领导白宫生成式人工智能工作组,就当前AI评估并收集意见。在陶哲轩看来,加入工作流的ChatGPT在数学专业领域中,并没有太多增值。 近来&#xff0c…

Windows 环境解压 zip 压缩包乱码问题

前言 最近在接受他人上传的 ZIP 压缩包时,发现解压后文件名出现了乱码,记得自己很久以前似乎把系统的编码改为了 UTF,所以盲猜是压缩包发送人的系统使用了 GBK 编码,出现了错误。 正文 探索 搜了一下,发现了知乎上一…

360°VR全景图片,探索未知,畅游全景

随着科技的不断发展,人们对于视觉的需求越来越高,单一平面的图片已经无法满足人们的需要。360VR全景图片的出现填补了这个空白,它以其全景视角和互动体验,为我们带来了一场视觉盛宴。下面就让我们一起来探讨一下360VR全景图片的特…

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

需求背景 目前,网易云商七鱼智能客服数据库缓存使用了 spring-data-redis 框架,并由自研的缓存组件进行管理。该组件使用 Jackson 框架对缓存数据进行序列化和反序列化,并将其以明文 JSON 的形式存储在 Redis 中。 这种方式存在两个问题&…

(数字图像处理MATLAB+Python)第八章图像复原-第三、四节:图像复原代数方法和典型图像复原方法

文章目录 一:图像复原代数方法(1)无约束最小乘方复原(2)约束复原 二:典型图像复原方法(1)逆滤波复原A:概述B:程序 (2)维纳滤波复原A&a…

【C语言】负数取模、取余

文章目录 一. 关于“取整”1. 向0取整2. 向负无穷取整3. 向正无穷取整4. 四舍五入式的取整 二. 关于“取模”的本质三. 取余和取模的区别 一. 关于“取整” 首先谈谈关于数学取整的问题 1. 向0取整 C中的除法和取整规则都是向0取整,即所有小数都向 0 的方向取整&…

第四十一天学习记录:C语言进阶:笔试题整理Ⅱ

喝汽水问题&#xff1a;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;输入价钱&#xff0c;可以喝多少汽水。&#xff08;编程实现&#xff09; #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main() {int money 0;int total 0;int empty 0;s…

手把手教配置vsc中的c\c++环境

为了防止你之前所看vsc配置C\C视频或者教学不成功的残留影响&#xff0c;这边开始会对vsc进行一次卸载和删除缓存 打开控制面板--点击程序--点击卸载--卸载vsc 显示效果如下 点击是 上面三部完成vsc卸载&#xff0c;接下完成残留卸载 打开你的c盘&#xff0c;如图 点击进去&…

Vue3-黑马(十四)

目录&#xff1a; &#xff08;1&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;2&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;3&#xff09;vue3-进阶-pinia1 &#xff08;4&#xff09;vue3-进阶-pinia2 &#xff08;1&#xff09;vue3-进阶-rout…

vite3+vue3 项目打包优化

现在很多小伙伴都已经使用 Vite Vue3 开发项目了&#xff0c;如果你是 “前端架构师” 或者是 “团队核心” 的话&#xff0c;不得不可考虑的一个问题就是性能优化。 说到前端性能优化&#xff0c;个人认为主要有两个方面&#xff1a; 减少文件的体积&#xff0c;体积小了加载…

SIEM日志管理解决方案

如果管理员想知道管理的网络中发生了什么&#xff0c;以便洞察潜在的威胁并在它们变成攻击之前阻止它们&#xff0c;那么管理员需要查看网络日志。企业网络中的设备如路由器、交换机、防火墙、服务器&#xff0c;业务运行的应用程序&#xff0c;如数据库和web服务器等。所有这些…

SpringBoot核心运行原理解析之-------@EnableAutoConfiguration

核心运行原理 我们通常在使用Spring Boot时&#xff0c;只需要引入对应的starters,Spring Boot启动时变回自动加载相关依赖&#xff0c;配置相应的初始化参数&#xff0c;以最快捷&#xff0c;简单的形式对第三方软件进行集成&#xff0c;这边是Spring Boot的自动配置功能。下…