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比特流的概念,使用若干个与二进制相对应的几何 ...
随机推荐
- C#基础加强(1)之索引器
索引器 介绍 索引器,初学者可能听起来有些陌生,但其实我们经常会用到它,例如: // 字符串的索引器 string str = "hello world"; ]; // 获取到字符 ...
- java之项目构建工具Gradle
介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...
- 实验:Oracle单节点RAC添加节点
环境:RHEL 6.5 + Oracle 11.2.0.4 单节点RAC 需求:单节点RAC添加新节点 1.添加节点前的准备工作 2.正式添加节点 3.其他配置工作 1.添加节点前的准备工作 参考Or ...
- HBase 笔记2
Hadoop 服务启动顺序: zookeeper ->journalnode->namenode -> zkfc -> datanode HBase Master WEB控制台 ...
- 笔记-ASP.NET WebApi
本文是针对ASP.NET WepApi 2 的笔记. Web API 可返回的结果: 1.void 2.HttpResponseMessage 3.IHttpActionResult 4.其他类型 返 ...
- Python记录10:模块
''' 1. 什么是模块 模块就一系列功能的集合体 模块有三种来源: 1. 内置的模块 2. 第三方的模块:pip install +模块名称 ...
- LinQ各种方式查询、组合查询、IQueryable集合类型
1.模糊查询(包含) Repeater1.DataSource = con.car.Where(r =>r.name.Contains(s)).ToList(); 2.开头查询 Repeater ...
- 微信小程序 地图地址解析
1.微信小程序提供了几个方式,引入地图, wx.getLocation(OBJECT) 获取当前的地理位置.速度.当用户离开小程序后,此接口无法调用:当用户点击“显示在聊天顶部”时,此接口可继续调用 ...
- LinkedList 利用的是尾插法
- hihoCoder 1394 : 网络流四·最小路径覆盖
题目链接:https://hihocoder.com/problemset/problem/1394 题目说是网络流,但是其实就是求有向无环图的最小路径覆盖. 不会网络流,只好用二分匹配了. 把每个点 ...