如何用Python生成二维码、解析二维码

楔子

二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用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关于二维码的一些操作。

以上就是如何用Python生成二维码、解析二维码的详细内容,更多关于Python生成二维码、解析二维码的资料请关注我们其它相关文章!

(0)

相关推荐

  • python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个二维码了. QRCode 生成这个二维码只用一行 import qrcode qrcode.make("不睡觉干嘛呢").get_image().show() #设置URL必须添加http:// 安装导入QRCode pip install qrcode #方法多,体量小 安装导入MyQR

  • 基于python实现可视化生成二维码工具

    环境 pip install gooey pip install MyQR 源代码 from gooey import GooeyParser,Gooey from MyQR import myqr @Gooey(encoding='utf-8',program_name='二维码生成器',program_description='生成动态.彩色.黑白二维码',language='chinese') def main(): parser = GooeyParser(description="生成

  • Python qrcode 生成一个二维码的实例详解

    借助第三方库qrcode实现. 二维码图片生成借助pillow qrcode的安装 在命令行中输入 pip install qrcode[pil] 用法: 1.在命令行中输入 qr "Some text" > test.png 2.在python中输入 import qrcode img = qrcode.make('Some data here') 高级用法: 使用QRCode类 import qrcode qr = qrcode.QRCode( version=1, erro

  • 基于Python生成个性二维码过程详解

    一.问题描述 通过调用MyQR模块来实现生成个人所需二维码. 安装: pip install myqr 二.代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myqr.run( words='http://www.cnblogs.com/mayi0312', save_name='qrcode.png' ) 效果图: 2.带图片的艺术二维码 光是二维码,太单调了点.我们可以加上我们想要的图片,使二维码更具辨识度! 准备的Logo图片: 当然,也可以选择其他个人

  • 一行Python代码制作动态二维码的实现

    在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. GitHub网站参加:https://github.com/sylnsfar/qrcode 用法比较简单,直接通过pip安装即可. pip3 install myqr 安装过程如下所示: 安装完成后,就可以基于命令指令生成想要的二维码了,myqr模块参数说明如下: 主要参数翻译如下: -v :定义二维码的大小,范围为 1 ~ 40,默认大小取决于输入的

  • python-图片流传输的思路及示例(url转换二维码)

    1.场景 将URL动态生成二维码前端展示(微信支付等,)--> 1.静态文件路径访问 返回URL_name,(a标签,src 静态路由访问) 2.流传输,前端渲染 二进制流返回前端,前端根据二进制流编码类型显示 3.前端js生成 后台获取到微信支付的code_url,前端js将code_url生成二维码,并渲染 实际代码 使用python_web 框架-->tornado manager.py import os import asyncio import tornado.ioloop imp

  • Python使用qrcode二维码库生成二维码方法详解

    安装qrcode库 pip install qrcode 声明 import qrcode 使用qrcode QRCode 方法 qrcode.QRCode( version=1, error_correction=qrcode.ERROR_CORRECT_L, box_size=10, border=4, image_factory=None, mask_pattern=None ) 参数解释: version:控制二维码的大小,取值范围从1到40.取最小值1时,二维码大小为21*21.取值为

  • 如何利用python检测图片是否包含二维码

    前言 因为一直在几个平台发文章,发现有些平台并不会检测文章中的图片是否会包含二维码,但是其中也有平台会去检测,所以就去研究了一下python如何去检测.搜了一下大概有两个库可以使用: 一个是zbar,这个库是挺牛的,不过只支持python2.7,再者也没有继续维护,什么年代了,应该没人使用python2.7了吧(2020年1月以后连python2.7都不再维护了,有还在使用的童靴该跟上时代了). 一个是pyzbar,基本上传承了zbar的功能. 安装 pip install pyzbar -i

  • Python利用myqr库创建自己的二维码

    前言 相信朋友们都看过各种群里钓鱼的涩图二维码吧(手动滑稽),今天学了一下制作方式(myqr库的使用),在这里分享一下这个整活利器. MyQR是一个能够生成自定义二维码的第三方库,可以根据需要生成普通二维码.带图片的艺术二维码,也可以生成动态二维码 首先配置好python3的环境(也可以用anaconda)和编译器(我用的pycharm). pip安装一下myqr库: pip install myqr pycharm中新建项目新建文件后 from MyQR import myqr myqr.ru

  • 如何用Python生成二维码、解析二维码

    楔子 二维码在我们的生活中可以说是必不可少的,不单单是手机支付.其它很多地方也都需要扫描二维码.那么下面我们就来看看如何使用python来生成二维码.以及识别二维码. 关于二维码,我们来说一下它的结构.当然关于二维码的结构其实不是太重要,这里只是提一下,没兴趣可以不用看. 从图中我们可以看出二维码结构整体划分为功能图形和编码区两大部分,功能图形又细分为:空白区.位置探测图形.位置探测图形分隔符.定位图形.校正图形,而编码区细分为:格式信息.版本信息.数据和纠错码字,来简单了解一下每一部分的功能:

  • llqrcode js识别二维码解析二维码信息实例

    目录 正文 代码 正文 llqrcode.js具有扫描二维码功能,用来进行从图片中识别二维码,可解析二维码的信息. 代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>llqrcode识别二维码</title> <script src="llqrcode.js"></script> <scri

  • 使用python写的opencv实时监测和解析二维码和条形码

    今天,我实现了一个很有趣的demo,它可以在视频里找到并解析二维码,然后把解析的内容实时在屏幕上显示出来. 然后我们直入主题,首先你得确保你装了opencv,python,zbar等环境.然后这个教程对于学过opencv的人可能更好理解,但是没学过也无妨,到时候也可以直接用. 比如我的电脑上的环境是opencv2.4.x,python2.7,和最新的zbar,在Ubuntu 12.12的系统下运行的 假设你的opencv已经安装好了,那么我们就可以安装zbar 你可以先更新一下 sudo apt

  • 使用Python生成200个激活码的实现方法

    题目:使用 Python 生成 200 个不重复的激活码 编写思路 # 激活码一般是由26个大写字母和10个数字任意组合而成 # 长度为12位或者16位的居多激活码 # 一个激活码里的字符是可以重复的,而且必须要保证激活码是不能重复的 测试用例 # 1.随机生成字符:数字加字母 # 2.生成200个 # 3.去重 编码: 第一步:随机生成16位字母跟数字的字符串 1.调用ramdom模块,使用了import random 2.choice() 方法返回一个列表,元组或字符串的随机项 使用了ran

  • python生成词云的实现方法(推荐)

    期末复习比较忙过段时间来专门写scrapy框架使用,今天介绍如何用python生成词云,虽然网上有很多词云生成工具,不过自己用python来写是不是更有成就感. 今天要生成的是励志歌曲的词云,百度文库里面找了20来首,如<倔强>,海阔天空是,什么的大家熟悉的. 所要用到的python库有 jieba(一个中文分词库).wordcould .matplotlib.PIL.numpy. 首先我们要做的是读取歌词.我将歌词存在了文件目录下励志歌曲文本中. 现在来读取他 #encoding=gbk l

  • 微前端架构ModuleFederationPlugin源码解析

    目录 序言 背景 MF 基本介绍 应用场景 微前端架构 服务化的 library 和 components ModuleFederationPlugin 源码解析 入口源码 Exposes Remotes Shared 小结 总结 序言 本文是 Webpack ModuleFederationPlugin(后面简称 MF) 源码解析 文章中的第一篇,在此系列文章中,我将带领大家抽丝剥茧.一步步地去解析 MF 源码.当然为了帮助大家理解,可能中间也会涉及到 Webpack 源码中的其它实现,我会根

  • C#如何用ThoughtWorks生成二维码

    在现在的项目中,较多的使用到二维码,前面介绍过一篇使用Gma生成二维码的操作,现在介绍一个第三方组件,主要介绍生成二维码,二维码的解析,以及对二维码的相关信息的选择,现在介绍ThoughtWorks用于生成二维码,本随笔采用.net4.5和C#6.0语法,也可以进行查看ThoughtWorks的底层源码. 1.生成二维码: /// <summary> /// 生成二维码 /// </summary> /// <param name="content">

  • Android中二维码的生成方法(普通二维码、中心Logo 二维码、及扫描解析二维码)

    首先声明我们通篇用的都是Google开源框架Zxing,要实现的功能有三个 ,生成普通二维码.生成带有中心图片Logo 的二维码,扫描解析二维码,直接上效果图吧 首先我们需要一个这样的 Zxing 的包类似于这样 接下来需要引入资源 1.drawable 中引入图片 navbar.png 2.layout中引入camera.xml.main.xml.qrcode_capture_page.xml 3.创建raw文件夹并添加beep.ogg 扫描声音 4.合并color.xml,copy ids.

  • java中ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android. 官网:ZXing github仓库 实战 本例演示如何在一个非 android 的 Java 项目中使用 ZXing 来生成.解析二维码图片. 安装 maven项目只需引入依赖: <dependency> <groupId>com.google.zxing

  • asp.net C#生成和解析二维码的实例代码

    类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: 复制代码 代码如下: using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; 主要源代码: 1.生成二维码 复制代码 代码如下: QRCodeEncoder qrCodeEncoder = new QRCodeEncoder()

随机推荐