Python3+qrcode+zxing生成和识别二维码教程
一、安装依赖库
pip install qrcode pillow image zxing
pillow是python3中PIL的代替库,image是生成图版需要用到的库
安装image时报错“Could not install packages due to an EnvironmentError: [Errno 22] invalid mode ('wb') or filename”,没管,直接在pycharm的setting中安装就没报错了。
二、使用qrcode生成二维码
2.1 qrcode简单用法
以下是生成指向百度的二维码为例,用户扫描后会访问百度首页。代码如下。
另外注意我们日常使用是扫一个二维码就跳转到某个页面。但本质而言,扫二维码就是得到内容,而不会跳转什么页面。
比如微信等扫以下二维码就是得到“https://www.baidu.com”,至于自动跳到百度首页是因为微信添加了如果扫描二维码结果是url就自动跳转的代码造成的。
也就是说二维码的内容完全可以不是url,而是“abcd”等仍意字符串,用微信扫时显示“abcd”而不是跳转什么页面而已。
不过由于二维码(指qr code)的容量是有限的,只有几百到几千个字节,所以一般不会直接用来存图片等内容。
import qrcode # 二维码内容
data = "https://www.baidu.com"
# 生成二维码
img = qrcode.make(data=data)
# 直接显示二维码
img.show()
# 保存二维码为文件
# img.save("baidu.jpg")
生成二维码如下:

2.2 qrcode高级用法
所谓高级用法,就是设置二维码大小、颜色等参数的写法。示例代码如下,其中实例化参意义如下:
version参数----二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177
error_correction参数----二维码错误容许率,默认ERROR_CORRECT_M,容许小于15%的错误率
box_size参数----二维码每个小格子包含的像素数量
border参数----二维码到图片边框的小格子数,默认值为4
(不太确定是不是都对,可直接查看官方说明:https://github.com/lincolnloop/python-qrcode#advanced-usage)
import qrcode
# 实例化二维码生成类
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# 设置二维码数据
data = "https://www.baidu.com"
qr.add_data(data=data) # 启用二维码颜色设置
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white") # 显示二维码
img.show()
生成二维码如下:

三、使用zxing识别二维码
3.1 zxing报错处理
google流行的是使用qrtools来读二维码,但是qrtools依赖zbar不兼容python3,其替代品zbarlight在windows安装又很麻烦,直接放弃了。
又回头折腾百度上流行的zxing,zxing一直报”python zxing OSError: [WinError 6] 句柄无效“,直接搜“if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:”。看到这篇文章说windows上报这个错可以直接“注释掉subprocess.py中的 _cleanup()方法”。虽然说的不是zxing,但库是一样的,姑且一试还真可以。
如下图所示,将_cleanup()直接注释掉:

3.2 zxing识别二维码代码
import zxing reader = zxing.BarCodeReader()
barcode = reader.decode("baidu.jpg")
print(barcode.parsed)
3.3 运行示例
使用2.1中的代码生成并保存二维码,解析运行结果如下:

参考:
https://github.com/lincolnloop/python-qrcode
https://www.cnblogs.com/sfnz/p/5457862.html
https://github.com/dlenski/python-zxing
https://baijiahao.baidu.com/s?id=1586194723484285133&wfr=spider&for=pc
Python3+qrcode+zxing生成和识别二维码教程的更多相关文章
- 使用ZXing.Net生成与识别二维码(QR Code)
Google ZXing是目前一个常用的基于Java实现的多种格式的1D/2D条码图像处理库,出于其开源的特性其现在已有多平台版本.比如今天要用到的ZXing.Net就是针对微软.Net平台的版本.使 ...
- ZXing 生成、读取二维码(带logo)
前言 ZXing,一个支持在图像中解码和生成条形码(如二维码.PDF 417.EAN.UPC.Aztec.Data Matrix.Codabar)的库.ZXing(“zebra crossing”)是 ...
- 在Windows IoT上生成和识别二维码
在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行. 关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在 ...
- python实现树莓派生成并识别二维码
python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...
- Java使用QRCode.jar生成与解析二维码
原文V:http://www.cnblogs.com/bigroc/p/7496995.html#3797682 正题:Java使用QRCode.jar生成与解析二维码demo 欢迎新手共勉,大神监督 ...
- C#生成和识别二维码
用到外部一个DLL文件(ThoughtWorks.QRCode.dll),看效果 生成截图 识别截图 生成二维码后右键菜单可以保存二维码图片,然后可以到识别模式下进行识别,当然生成后可以用手机扫描识别 ...
- PHP 生成、识别二维码及安装相关扩展/工具
2018-02-20 00:30:26 更新:推荐新扩展(极力推荐) 这篇文章里用的两个二维码扩展都有些问题和麻烦:phpqrcode(生成二维码)的源码有点小 bug: 而 php-zbarcod ...
- ZXing 生成、解析二维码图片的小示例
概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...
- 使用zxing生成和解析二维码
二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的: 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何 ...
随机推荐
- [js]js中类的继承
凡事总有个开端,也有个tag节点(里程碑).阶段性的划分总结,是一种对精神的慰藉,否则精神就像野马一样,会放弃,会累死. 继承: 子类原型指向父类一个实例 类的继承-模拟系统类 Object -> ...
- 【JVM】-NO.114.JVM.1 -【JDK11 HashMap详解-3-put-treeifyBin()-AVL】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- Cocos Creator - 入门教程项目 - 博客频道 - CSDN.NET
3457 教程司令部 [20160418] | Cocos Creator - CocoaChina CocoaChina_让移动开发更简单cocoachina.com 2033 Cocos Crea ...
- 详解C# 网络编程系列:实现类似QQ的即时通信程序
https://www.jb51.net/article/101289.htm 引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net ...
- form提交所有数据
HTML: <div class="panel"> <div class="panel-body"> <h3>完善简历< ...
- 正则表达式(re模块)
s='hello world' print(s.find('llo')) #找到llo ret=s.replace('ll','xx') #用xx代替ll print(ret) print(s.spl ...
- python模块化学习(一)
import time #获取cpu的时间: #获取本地时间: #获取标准时间格式: #获取时间戳: #print(time.clock()) #这个在3即将被舍弃 print(time.proces ...
- Kubernetes 网络改进的三项实践分享
自研CNI IPAM插件 解决K8s功能问题 首先,在功能方面,Kubernetes 网络模型由于IP不固定,无法对IP资源进行精细管控,无法使用基于IP的监控和基于IP的安全策略,此外,一些IP发现 ...
- CentOS 7 nginx+tomcat9 session处理方案之session复制
我们的目标是所有服务器上都要保持用户的Session,那么将每个应用服务器中的Session信息复制到其它服务器节点上是不是就可以呢? 这就是Session的第二中处理办法:会话复制 192.168. ...
- ztree模糊搜索
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="X ...