Python与二维码
关于二维码
二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
QRCode
QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。从QR Code码的英文名称Quick Response Code可以看出,超高速识读特点是QR Code码区别于四一七条码、Data Matrix等二维码的主要特性。由于在用CCD识读QR Code码时,整个QR Code码符号中信息的读取是通过QR Code码符号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短,它具有超高速识读特点。用CCD二维条码识读设备,每秒可识读30个含有100个字符的QR Code码符号;对于含有相同数据信息的四一七条码符号,每秒仅能识读3个符号;对于Data Martix矩阵码,每秒仅能识读2~3个符号。QR Code码的超高速识读特性使它能够广泛应用于工业自动化生产线管理等领域。
在目前几十种二维条码中,常用的码制有:PDF417二维条码, Datamatrix二维条码, Maxicode二维条码, QR Code, Code 49, Code 16K ,Code one,等,除了这些常见的二维条码之外,还有Vericode条码、CP条码、Codablock F条码、田字码、 Ultracode条码,Aztec条码。
pyqrcode ##
pyqrcode 是 Python 的扩展用来生成二维条形码以及对二维条形码进行解码。利用pyqrcode可以很轻松的将我们需要的信息转换成为二进制编码图片,并通过本地图片浏览方式展示:
import qrcode
import os
import sys
import timeQRImagePath = os.getcwd() + '/qrcode.jpg'
qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=2,
)
data=input()
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image()
img.save('qrcode.jpg')#针对不同的系统平台选取相应的系统调用代码
if sys.platform.find('darwin') >= 0:os.system('open %s' % QRImagePath)
elif sys.platform.find('linux')>=0:os.write('xdg-open %s' % QRImagePath)
else:os.system('call %s' % QRImagePath)
os.system('call %s' % QRImagePath)
time.sleep(5)
os.remove(QRImagePath)
扩展
使用上面的代码很不美观,所以我尝试使用python支持的GUI重新整理了相关的代码,使用PyQT5模块,所以在尝试使用相关代码的时候,需要已经安装pyqt5:
from PyQt5 import QtCore, QtGui, QtWidgets
import qrcode
import os
import sys
import timefrom PyQt5.QtGui import QPixmapqr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=2,
)class Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(400, 300)self.label = QtWidgets.QLabel(Form)self.label.setGeometry(QtCore.QRect(10, 10, 71, 41))self.label.setObjectName("label")self.sourceEdit = QtWidgets.QTextEdit(Form)self.sourceEdit.setGeometry(QtCore.QRect(90, 10, 291, 31))self.sourceEdit.setObjectName("sourceEdit")self.picLab = QtWidgets.QLabel(Form)self.picLab.setGeometry(QtCore.QRect(30, 80, 221, 201))self.picLab.setObjectName("picLab")self.genButton = QtWidgets.QPushButton(Form)self.genButton.setGeometry(QtCore.QRect(300, 80, 75, 81))self.genButton.setObjectName("genButton")self.exitButton = QtWidgets.QPushButton(Form)self.exitButton.setGeometry(QtCore.QRect(300, 200, 75, 81))self.exitButton.setObjectName("exitButton")self.retranslateUi(Form)#退出按钮绑定的槽函数self.exitButton.clicked.connect(Form.close)#生成图片按钮绑定的自定义槽函数self.genButton.clicked.connect(self.generateImg)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "二维码生成"))self.label.setText(_translate("Form", "SourceCode"))self.genButton.setText(_translate("Form", "生成"))self.exitButton.setText(_translate("Form", "退出"))self.OkImage = os.getcwd() + r'\qrcode.png'def generateImg(self):qr.add_data(self.sourceEdit.toPlainText())qr.make(fit=True)#生成二维码图片img = qr.make_image()#需要注意的是,有序自身机制,使用png形式图片会相当方便,其他的格式在生成QPixmap形式时候会报nullimg.save('qrcode.png')#将已经生成的图片加载成为QPixmap格式qpic=QPixmap(self.OkImage).scaled(self.picLab.width(),self.picLab.height())self.picLab.setPixmap(qpic)#将已经生成的图片删除,不占用空间os.remove(self.OkImage)if __name__=='__main__':import sysapp=QtWidgets.QApplication(sys.argv)widget=QtWidgets.QWidget()ui=Ui_Form()ui.setupUi(widget)widget.show()sys.exit(app.exec_())
效果如图
二维码解析
Python中关于二维码解析的现成模块有很多,比较著名的就是Zbar以及ZXing.然而很不幸的是,官方的版本都是支持到python2.x,下面是在python2.x的例子:
import zbar
def get_QR():scanner = zbar.ImageScanner()scanner.parse_config("enable")pil = Image.open("char.png").convert('L')width, height = pil.sizeraw = pil.tostring()image = zbar.Image(width, height, 'Y800', raw)scanner.scan(image)data = ''for symbol in image:data+=symbol.datadel(image)return data
其中 data就是我们需要的已经解析得到的内容。
查阅了相关资料,关于Python3.x的zbar适配已经有人放出来了,叫做zbarlight,我尝试按照作者的的步骤执行,却发生了一些麻烦,最终没有完成。作者关于win平台上的支持还没有足够重视。
http://zbar.sourceforge.net/这是zbar的win软件版本,运行之后,我们可以直接使用命令行形式解析二维码图片。
zbarimg -d http://7xowaa.com1.z0.glb.clouddn.com/qrcode.jpg
zbar分为zbarimg和zbarcam分别对应图片格式、摄像头格式,摄像头形式在win平台不太管用,图片格式可以填写本地图片文件名,也可以使用URL.
效果图
转载于:https://www.cnblogs.com/peihao/p/5269134.html
Python与二维码相关推荐
- python生成二维码、动态二维码 和 而二维码解析
python生成二维码.动态二维码 和 而二维码解析(8-20190129) 文章目录: 一.二维码介绍 二. 就是为了好玩所以想搞一下二维码,"好玩",少年醒醒,不要骗自己啦,起 ...
- 互联网 4 大发明之二维码,你如何使用 Python 生成二维码?
阅读文本大概需要 8 分钟. 新时代,人们有人信新的追求,自然而然会有新发明的诞生.去年,在"一带一路"国际合作高峰论坛举行期间, 20 国青年投票选出中国的"新四大发明 ...
- python生成二维码_python生成二维码的实例详解
python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...
- Python生成二维码的操作方法
使用的是qrcode库,在使用之前需要安装此库 pip install qrcode 网址 #python生成二维码 import qrcode img=qrcode.make("http: ...
- Python案例笔记 | 用python制作二维码
基于Python3版本的学习. 要用python制作二维码,需用python第三方库:MyQR . 安装myqr模块 首先需要在cmd中用pip安装myqr模块. win + r 打开运行命令,输入& ...
- 使用 Python 生成二维码
本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 新时代,人们有人信新的追求,自然而然会有新发明的诞生.去年,在"一带一路"国际合作高峰论坛举行期间, 20 国 ...
- 如何用Python生成二维码
使用Python做二维码需要一个非常简单的模块--MyQR,这个模块相比于QRcode更加简单,功能也是特别强大,下面介绍一种生成简单二维码的方式. 安装方式 利用pip安装. 使用方式 首先导入. ...
- 初学python制作二维码以及最新感悟
初学python制作二维码 一.安装Python 推荐百度经验链接. 二.安装pip模块 Python 3.4以后版本默认安装了pip,但是由于不是最新故需要升级,pip的升级命令为(开始->c ...
- 详解 Python qrcode 二维码模块
原文链接 摘要: 详解 Python qrcode 二维码模块. 项目地址 https://github.com/lincolnloop/python-qrcode 声明 importqrcode 使 ...
- Python制作二维码简易步骤
附件 Python制作二维码简易步骤 ------------------------------------------- 附:Python制作二维码简易步骤 附:Python爬取整本小说 附:Py ...
最新文章
- 软件开发流程包含哪些内容
- 【重读iOS】网络请求2:应用
- php爬取ckplayer,CKplayer站外调用示例附最终效果
- Spring_Hibernate整合准备
- Supervised Convolutional Neural Network
- PHP代码中的情话,php语言编程情话
- typescript之nodejs开发
- C# list使用方法
- 短信轰渣器搭建源码下载
- C语言通讯录管理系统开发
- django使用kindeditor上传图片问题
- spring boot 邮箱验证总结
- 普渡大学计算机科学系可以转到计算机工程吗,2019美国普渡大学计算机专业研究生申请条件...
- Clickhouse优点 缺点 / Doris 优点 缺点
- 企业即时通讯行业评测——imo VS RTX
- 北京大学王悦博士给学生的话
- 【APICloud系列|1】华为应用市场 应用版权证书或代理证书怎么填
- 2022年河北二级建造师建设工程施工管理《施工合同管理》练习及答案
- JZOJ 1266. 玉米田
- swapidc对接虚拟服务器,利用SWAPIDC实现自助开通虚拟主机
热门文章
- Golang单元测试坑盘点
- 1.1 容器技术概念
- jama java 教程_java矩阵包jama的简单操作
- 程序设置波特率和串口调试助手波特率设置不同才能通信
- 大爷,快来玩呀!带禁手规则的五子棋实践强化学习理论
- SpringCloud系列知识快速复习 -- part 1(SpringCloud基础知识,Docker,RabbitMQ)
- ip网络的时延:发送时延(传输时延),传播时延,处理时延,排队时延
- brief analysis of the classification, application and prospect of lidar/激光雷达的分类、应用现状及前景简析
- 《炬丰科技-半导体工艺》用于MEMS谐振器的氮化铝蚀刻工艺
- 医疗应急物资管理应用-基于RIFD技术的医疗物资仓库管理系统