使用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 ...
随机推荐
- DHCP服务(dhcpd)
DHCP动态分配主机地址(Dynamic Host Configuration Protocol) 动态主机配置协议(DHCP)是一种基于UDP协议且仅限于在局域网内部使用的网络协议,主要用于大型的局 ...
- Java文件 ---RandomAccessFile示例
RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件 ...
- 关于update 表名 set 字段1 = 值1 and 字段2 = 值2的执行结果说明
技术交流群: 233513714 如果执行了以下的语句,则brand等于‘OPPO’条件所对应的数据不会做改变,但是sequence_brand列除brand = 'OPPO'之外的所有数据都会变为0 ...
- 用swoole实现nginx日志解析
1.原技术路线解析 在nging配置中将日志信息交给syslog处理,rsyslog配置中将数据传递给了514端口解析,然后将解析好的数据传入elasticsearch中. nginx配置 serve ...
- fiddler如何抓取夜神模拟器上的包
一.设置Fiddler代理 1.点击Tools-Fiddler Options进入Fiddler Options页面 2.点击Connections,将Fiddler listens on port设 ...
- flask_入门教程之一
一.教程涉及开发语言.脚本.框架.数据库等内容 Python + Flask + requests 通过命令安装:pip install flask 二.创建第一个flask脚本 一个最小的 Flas ...
- (原)Unreal渲染相关的缓冲区 及其 自定义代码几种抓取
@authot: 白袍小道 转载说明那啥即可. (图片和本文无关,嘿嘿,坑一下) 以下为Unreal4.18版本中对GPUBuffer部分的分析结果 (插入:比之够着,知至目的) ...
- Android事件分发机制详解(1)----探究View的事件分发
探究View的事件分发 在Activity中,只有一个按钮,注册一个点击事件 [java] view plaincopy button.setOnClickListener(new OnClickLi ...
- Servlet中文件上传
利用getReader()和getInputstream()上传 package control; import javax.servlet.ServletException; import java ...
- SimpleMDE编辑器 + 提取HTML + 美化输出
开发步骤: 1. 安装和引入(npm或者bower都可以) $ bower install simplemde --save //css - debug目录下为开发版本 <link rel=&q ...