使用 MyQR 生成二维码
生成二维码的方式多种多样, 我们先来看看使用 MyQR 模块如何生成一个二维码.
(1) 模块安装
在开始使用之前我们需要先安装该模块. 这里使用 pip 直接下载, 这里选用的是国内的源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ myqr
安装完成后我们就可以开始使用了. 先生成一个最简单的二维码:
- from MyQR import myqr # 注意区分大小写
- myqr.run(words='Do not go gentle into that good night!') # 生成二维码
在我们运行这个程序后, py 文件同目录下会生成图片 qrcode.PNG, 该图片就是我们的二维码图片, 扫出来就是我们上面设置的文本信息了.
生成一个图像二维码
我们日常生活中的二维码都比较单调, 有纯二维码, 整个二维码只有黑白方块; 也有带图片的二维码, 通常是在二维码中心放置一个图片, 而我们现在要做的是一个整体是一张图片的二维码. 也就是将一张图片作为背景. 这种二维码实现起来也非常简单:
- from MyQR import myqr
- myqr.run(
- words='http://www.baidu.com', # 包含信息
- picture='lbxx.jpg', # 背景图片
- colorized=True, # 是否有颜色, 如果为 False 则为黑白
- save_name='code.png' # 输出文件名
- )
使用 qrcode 生成二维码
qrcode 同样是一个便捷的工具, 使用该模块我们也能够很快的实现二维码的生成.
(1) 模块安装
这里同样使用 pip 安装, 我们在命令行窗口执行下列语句:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ qrcode
安装完成后我们就可以开始生成我们的第一个二维码了:
- import qrcode
- img = qrcode.make('http://www.baidu.com')
- img.save('qrcode.jpg')
在我们调用 save 方法后, 项目下就会生成一张 qrcode.PNG 图片, 该图片就是我们的二维码图片, 我们扫出来同样是直接跳转网页.
(2) 更准确的生成二维码
除了外汇代理 http://www.fx61.com/ib.html 上面的方式, 我们还可以通过 QRCode 类来生成二维码, 这种方式我们可以控制二维码的更多信息:
- from qrcode import QRCode
- qr = QRCode() # 创建二维码对象
- qr.add_data('http://www.baidu.com') # 设置二维码数据
- img = qr.make_image() # 创建二维码图片
- img.save('qrcode.png') # 保存二维码图片
通过这种方式我们同样可以生成一个二维码, 当然我们还可以丰富一下:
- import qrcode
- qr = qrcode.QRCode(
- version=5, # 二维码的大小, 取值 1-40
- box_size=10, # 二维码最小正方形的像素数量
- error_correction=qrcode.constants.ERROR_CORRECT_H, # 二维码的纠错等级
- border=5 # 白色边框的大小
- )
- qr.add_data('http://www.baidu.com') # 设置二维码数据
- img = qr.make_image() # 创建二维码图片
- img.save('qrcode.png') # 保存二维码
其中 version 包含了大小信息, 当设置为 1 时, 生成一个 12x12 大小的二维码, 单位为 box_size 个像素.
我们可以将 version 设置为 None, 并添加一句 qr.make(fit=True), 这样程序会自动生成大小合适的二维码.
另外 error_correction 为纠错等级的设置, 纠错等级是什么这就是关于二维码本身的知识了.
ERROR_CORRECT_L: 大约 7% 或更少的错误能被纠正.
ERROR_CORRECT_M(默认): 大约 15% 或更少的错误能被纠正.
ROR_CORRECT_H: 大约 30% 或更少的错误能被纠正.
上面是可以供我们选择的几个内置常数.
(3) 读取二维码中的数据
上面我们一直在讲如何生成二维码, 但是我们人本身是无法读取二维码中的信息, 这就要借助我们的设备了. 在 Python 中, 我们可以通过 pyzbar 模块来识别二维码的识别, 当然还有其它方法, 这里我们使用 pyzbar 看看应该如何识别二维码, 首先我们需要安装模块:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pyzbar
另外我们需要安装 opencv 模块:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python
之后就可以开始识别二维码了:
- import cv2
- from pyzbar import pyzbar
- im = cv2.imread('qrcode.png') # 读取二维码
- data = pyzbar.decode(im) # 解析二维码
- print(data)
其中包含的信息为 http://www.baidu.com, 我们看一下输出结果:
[Decoded(data=b'http://www.baidu.com', type='QRCODE', rect=Rect(left=5, top=5, width=29, height=29), polygon=[Point(x=5, y=5), Point(x=5, y=34), Point(x=34, y=34), Point(x=34, y=5)])]
显然是我们看不懂的东西, 但是我们在里面看到了 http://www.baidu.com 的字样, 我们可以通过如下方式解析出内容:
- import cv2
- from pyzbar import pyzbar
- im = cv2.imread('qrcode.png') # 读取二维码
- data = pyzbar.decode(im) # 解析二维码
- text = data[0].data.decode('utf-8') # 解析数据
- print(text)
来源: http://www.bubuko.com/infodetail-3518682.html