Python一行代码实现生成和读取二维码
作者:派森酱 发布时间:2023-04-30 15:31:18
二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。
二维码被称为快速响应码,可能看起来很简单,但它们能够存储大量数据。无论扫描二维码时包含多少数据,用户都可以立即访问信息。
近些年二维码也是迅速普及,目前已经成为了我们生活中的一部分,它有许多应用场景:
信息获取(名片、地图、WIFI密码、资料)
网站跳转(跳转到微博、手机网站、网站)
广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
手机电商(用户扫码、手机直接购物下单)
防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
优惠促销(用户扫码,下载电子优惠券,抽奖)
会员管理(用户手机上获取电子会员信息、VIP服务)
手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
账号登录(扫描二维码进行各个网站或软件的登录)
Python 处理二维码也非常简单,今天我们就来看看怎样使用一行代码生成或者读取二维码。
生成二维码
Python 有一个处理二维码的模块叫qrcode
,我们要生成二维码,需要安装这个库:
生成二维码就是调用这个模块的 make
函数:
import?qrcode
img?=?qrcode.make('https://www.zhihu.com/people/wu-huan-bu-san')
img.save('./pic.jpg')
运行这段代码,就可以得到下面的二维码:
大家可以扫码试试看,说不定有惊喜哦!
你肯定会说:骗子!这不是一行代码啊!
好吧,这两行可以合并的嘛:
qrcode.make('https://www.zhihu.com/people/wu-huan-bu-san').save('./pic.jpg')
读取二维码
读取二维码就是将二维码背后隐藏的信息解析出来,这时候就不是用 qrcode
这个模块了,而是用 OpenCV 这个模块。相信公众号的读者肯定对这个库比较熟悉,经常出现在我们的文章中。
先安装这个库:
pip install opencv-python
接着,我们以上面生成的二维码为例,来看看读取的代码:
import?cv2
d?=?cv2.QRCodeDetector()
val,?_,?_?=?d.detectAndDecode(cv2.imread("pic.jpg"))
print("the?secret?is:?",?val)
运行这段代码,打印信息是:
the secret is: https://www.zhihu.com/people/wu-huan-bu-san
这正是我们生成二维码的内容。
这里怎么转换成一行代码就不需要我赘述了吧!
补充
当然Python除了可以生成静态的二维码,还能生成动态的
下面是实现动态二维码的示例代码,可以参考一下
# -*- coding:utf-8 -*-
# @Time : 2021-09-30
# @Author : carl_DJ
from MyQR import myqr
#定义二维码内容
word = "miss U "
#追加背景
myqr.run(
word,
#图片类型为位.gif
picture='./sohucs.gif',
colorized=True,
version=6
)
当然,Python还可以制作一个自定义二维码生成工具,可以根据自己的需求生成黑白的或者彩色的二维码。
from gooey import GooeyParser,Gooey
from MyQR import myqr
@Gooey(encoding='utf-8',program_name='二维码生成器',program_description='生成动态、彩色、黑白二维码',language='chinese')
def main():
parser = GooeyParser(description="生成动态、彩色、黑白二维码")
parser.add_argument('文本', widget="TextField")
parser.add_argument('文件', widget="FileChooser") # 文件选择框
parser.add_argument('样式选择', widget='Dropdown',choices={"黑白":"1","彩色":2,"动态":3})
parser.add_argument('文件保存路径',widget='DirChooser')
args = parser.parse_args()
if args.样式选择 == '黑白':
# 生成二维码
myqr.run(words=args.文本,version=9,save_name='qr.png',save_dir=args.文件保存路径)
print('成功')
elif args.样式选择 == '彩色':
if args.文件.split('.')[-1] == 'gif' or args.文件.split('.')[-1] == 'png' or args.文件.split('.')[-1] == 'jpeg':
myqr.run(words=args.文本, version=9, save_name='qr.png', save_dir=args.文件保存路径, picture=f'{args.文件}',colorized=True)
print('成功')
elif args.样式选择 == '动态':
if args.文件.split('.')[-1] == 'gif':
myqr.run(words=args.文本, version=9, save_name='qrcode.gif', save_dir=args.文件保存路径, picture=args.文件,colorized=True)
else:
print("图片格式错误,动态二维码图片必须为gif格式的")
if __name__ == '__main__':
main()
来源:https://mp.weixin.qq.com/s/GUoe08XFI0TvjIoadJ2gzw
猜你喜欢
- 一、TensorBoardTensorBoard 一般都是作为 TensorFlow 的可视化工具,与 TensorFlow 深度集成,它能
- 一直以来,每次调用Ajax方法都需要创建一次 Microsoft.XMLHTTP 对象,今天在使用Ajax技术做一个类似聊天室的
- 实战场景本篇博客为大家介绍一款新的自动化测试工具,效果类似 selenium,但是这个模块年轻。模块名称为 playwright-pytho
- 本文实例讲述了Symfony2之session与cookie用法。分享给大家供大家参考,具体如下:session操作:1. Set Sess
- 爬蟲四步原理:1.发送请求:requests2.获取相应数据:对方及其直接返回3.解析并提取想要的数据:re4.保存提取后的数据:with
- 摘要前面给大家分享了pandas做数据合并的两篇[pandas.merge]和[pandas.cancat]的用法。今天这篇主要讲的是pan
- 本文实例讲述了Python实现的自定义多线程多进程类。分享给大家供大家参考,具体如下:最近经常使用到对大量文件进行操作的程序以前每次写的时候
- 决策树是一种将数据集通过分割成小的、易于处理的子集来进行分类或回归的算法。其中每个节点代表一个用于划分数据的特征,每个叶子节点代表一个类别或
- 在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档
- 前言subprocess库提供了一个API创建子进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准
- python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认
- 应用正则表达式的全局匹配,可以匹配出字符出现的次数,比较这些次数,将最大的保存并返回。代码如下: var countMost = funct
- 前言:本文的主要内容是介绍Python中的列表及其方法的使用,涉及到的方法包括对列表元素进行修改、添加、删除、排序以及求列表长度等,此外还介
- 本文实例讲述了php7 图形用户界面GUI 开发。分享给大家供大家参考,具体如下:一、下载指定系统扩展http://pecl.php.net
- Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知
- Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScr
- 和朋友讨论时,我提到过一个观点,所有框架层设计中,最核心的是导航设计。最近更看到有国外同行提出“80%的可用性是导航!”因为良好的导航可以保
- EdgePool简介EdgePool是一种用于图分类的卷积神经网络(Convolutional Neural Network,CNN)模型。
- 一、死锁简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。1、迭代死锁该情
- 静态页面由于其稳定性快速性,的确给SE、用户及站长带来了方便。但有时,需要记住用户的信息,如用户留下评论后,下一次再来,就要记住该用户的信息