使用MyQR生成二维码
楔子
二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用python来生成二维码、以及识别二维码
关于二维码,我们来说一下它的结构。当然关于二维码的结构其实不是太重要,这里只是提一下,没兴趣可以不用看。

从图中我们可以看出二维码结构整体划分为功能图形和编码区两大部分,功能图形又细分为:空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形,而编码区细分为:格式信息、版本信息、数据和纠错码字,来简单了解一下每一部分的功能:
空白区:留白,不需要做任何处理
位置探测图形:协助扫描软件定位二维码码
位置探测图形分隔符:区分功能图形和编码区
定位图形:指示标识密度和确定坐标系
校正图形:校正图形的数量和位置
格式信息:存放格式化数据的信息
版本信息:二维码的规格,二维码符号共有 40 种规格的矩阵
数据和纠错码字:实际保存的二维码信息和纠错码字(用于修正二维码损坏带来的错误)
生成二维码
生成二维码的话,python有两个第三方模块:qrcode和MyQR可以帮我我们生成二维码,下面来看一下这两个模块的用法。
qrcode
生成比较简单的二维码就是,当我们扫描的时候,会自动跳转到某个页面
import qrcode # 调用QRCode,可以接收以下参数
"""
version: 二维码的格子大小,可以是1到40。值越大,格子越大,一般不超过10,选择3比较合适
error_correction: 二维码错误容许率,默认为qrcode.constants.ERROR_CORRECT_M,容许小于 15% 的错误率
此外还有qrcode.constants.ERROR_CORRECT_L: 容许小于 7% 的错误率
qrcode.constants.ROR_CORRECT_H: 容许小于 30% 的错误率
box_size: 二维码每个小格子包含的像素数量
border: 二维码到图片边框的小格子数,默认值为 4
"""
qr = qrcode.QRCode() # 事实上里面的参数我们可以都不指定,默认会选择一个比较合适的参数 # 调用add_data,指定url。
qr.add_data("https://www.baidu.com/")
# 生成二维码图像,颜色为蓝色,背景色为粉色
img = qr.make_image(fill_color='blue', back_color='pink')
# 显示图像,这个会打开一个临时文件
img.show()
# 此外,我们还可以保存到硬盘上
img.save("1.png") # 事实上,这个img实际上是通过PIL模块得到的,可以理解为里面Image对象
# 如果你熟悉PIL模块的话,那么你应该知道可以将里面Image对象保存成图片对应的字节流
from io import BytesIO
buf = BytesIO()
img.save(buf) # 将字节保存到buf里面
with open("2.png", "wb") as f:
f.write(buf.getvalue()) # 和直接保存为1.png是一样的

此时我们就生成了一个二维码,当扫描该二维码的时候就会跳转到百度
另外我们在add_data中指定的是一个url,我们也可以不指定url,而是指定一段文字。这样的话,当扫描的时候就会显示我们输入的文字
MyQR
MyQR也可以用来生成二维码,但是它和qrcode相比最大的特点就是它可以嵌入图片当背景
from MyQR import myqr # 主要用到以下几个参数
# words:文本,可以是一个链接,或者你想说的话(不支持中文,很不友好)
# picture:你用到的图片,作为背景,不然只是一个光秃秃的二维码
# colorsize:True,表示生成彩图
# save_name:表示生成的二维码的名字
myqr.run(words="http://www.bilibili.com",
picture="satori.jpg",
colorized=True,
save_name="bilibili.png")

当扫这个二维码的时候,就会跳转到bilibili。指的一提的是,这里图片,还可以使用gif格式的动图,当然生成的图片也要是gif格式的。
解析二维码
我们除了可以使用python生成二维码,还可以解析二维码,解析二维码也有两个模块,一个是zxing、一个是pyzbar。
首先是zxing,不过这个模块有点让人尴尬,因为这个模块调用的是java的接口。也就是说解析二维码的底层工作是java做的,python是负责调用,所以使用这个模块的时候需要你本地有java环境。所以我使用我阿里云上的centos进行测试
>>> import zxing
>>> reader = zxing.BarCodeReader()
>>> barcode = reader.decode('bilibili.png')
>>> barcode.parsed
'http://www.bilibili.com' # 是可以解析出来的
>>>
然后看看pyzbar模块,这个模块就不需要java了,直接使用python即可。
import numpy as np
from PIL import Image
from pyzbar import pyzbar # 读取文件,转成数组
im = np.array(Image.open("bilibili.png"))
print(pyzbar.decode(im))
# 返回的信息还是很多的
"""
[
Decoded(data=b'http://www.bilibili.com',
type='QRCODE',
rect=Rect(left=35, top=35, width=263, height=264),
polygon=[Point(x=35, y=35), Point(x=35, y=297), Point(x=297, y=299), Point(x=298, y=35)])
]
""" # 拿到内容
print(pyzbar.decode(im)[0].data.decode("utf-8")) # http://www.bilibili.com
两个模块都是可以正常解析的,以上就是python关于二维码的一些操作
使用MyQR生成二维码的更多相关文章
- python库myqr生成二维码
python中有一个好玩的库,不仅可以生成各种花色的二维码,还可以生成动态二维码. MyQR是一个能够生成自定义二维码的第三方库,可以根据需要生成普通二维码.带图片的艺术二维码,也可以生成动态二维码 ...
- MyQR库自动为网址生成二维码
首先安装MyQR库: pip install MyQR #导包 from MyQR import myqr #生成二维码 words=你要为那个网址生成二维码 save_name=保存后的图片名 pi ...
- jenkins 安卓打包生成二维码下载
先来张图看看吧 构思 jenkins gradle 打包apk文件,python myqr 模块生成二维码 放入nginx 访问图片的路径,apk安装包放在 nginx 下载目录. 环境 centos ...
- 使用Python第三方库生成二维码
本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...
- 使用 Python 生成二维码
在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁.扫码支付.共享单车和网购.其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款.这种新的支付方式,造就二 ...
- java、python、golang等开发语言如何快速生成二维码?
免费二维码生成途径非常多!比如比较有名的草料二维码,如果只是简单的使用,用它就足够了.但是如果想大规模的生成,那就不太合适了.再者很多工具都没办法在二维码中加入logo(像微信二维码一样). 接下来, ...
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- 使用jquery.qrcode生成二维码(转)
jQuery 的 qrcode 插件就可以在浏览器端生成二维码图片. 这个插件的使用非常简单: 1.首先在页面中加入jquery库文件和qrcode插件. <script type=" ...
- iOS 生成二维码
首先先下载生成二维码的支持文件 libqrencode 添加依赖库 CoreGraphics.framework. QuartzCore.framework.AVFoundation.framewor ...
随机推荐
- idea 项目jar包出错
找到jar包所在文件目录,删除下面的所有文件,刷新maven项目,重新引入jar包
- TouTiao开源项目 分析笔记17 新闻媒体专栏
1.效果预览 1.1.要实现的效果 1.2.如何调转到新闻媒体专栏 点击右上角的用户图标. 在新闻详情页面的Fragment的菜单点击事件中触发. case R.id.action_open_medi ...
- 9.5web service基础知识
Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...
- 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失
1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...
- Android保持屏幕常亮唤醒状态
第一步: 首先添加权限: <uses-permission android:name="android.permission.WAKE_LOCK"></uses ...
- python之while/for循环
一.while循环 (一)循环语句 while 后面接判断语句,在返回结果时有以下几种语句: 1.break 仅适用于循环语句,意思是结束最近的循环 2.continue 仅适用于循环语句,意思是跳到 ...
- Tornado详解
1.Tornado路由系统 1.1 Tornado程序示例 新建一个tornadodemo.py, import tornado.ioloop import tornado.web user_info ...
- Python运算符及逻辑运算
基本运算符 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.在计算器语言中运算符大致可以分为5种类型:算术运算符.连接运算符.关系运 ...
- 3dMax,Maya与FBX
3DMax下载地址(包含安装教程与注册方法):http://www.3d66.com/popsoft_1.html 3DMax已经自带导出为fbx格式的功能,所以无需安装fbx插件 Maya下载地址( ...
- C++ Primer 第2章 变量和基本类型
C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...