+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-07(2)

2019-08(89)

2019-09(94)

2019-10(15)

2019-11(5)

【案例】不仅用 Python 制作二维码,我还要扫描它!

发布于2020-11-09 17:56     阅读(643)     评论(0)     点赞(16)     收藏(4)


0

1

2

3

4

5

6

1. 案例介绍

我们使用 Python 提供的 qrcode 库和 pyzbar 库实现二维码的制作和解码。

2. 准备工作

  • qrcode 库。
  • pillow 库。
  • pyzbar 库。

3. 细节设计

3.1 生成二维码

核心代码:

qr = qrcode.QRCode()
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')

我们使用 qrcode 提供的 add_data、make、make_imge 方法,实现加载数据、生成二维码对象、将二维码对象保存至图片功能。

3.2 解析二维码

核心代码:

decode_data = pyzbar.decode(Image.open(filePath), symbols=[pyzbar.ZBarSymbol.QRCODE])[0].data.decode('utf-8')

我们使用 pyzbar 提供的 decode 方法,读入二维码图片,进行解码。

>>> pyzbar.decode(Image.open(filePath), symbols=[pyzbar.ZBarSymbol.QRCODE])
[Decoded(data=b'abcdefghijkl123', type='QRCODE', rect=Rect(left=4, top=4, width=84, height=84), polygon=[Point(x=4, y=4), Point(x=4, y=88), Point(x=88, y=88), Point(x=88, y=4)])]

4. 代码汇总

# coding: utf-8
# !/usr/bin/python
"""
@File       :   QRcode.py
@Author     :   jiaming
@Modify Time:   2020/1/13 19:55
@Contact    :   https://blog.csdn.net/weixin_39541632
@Version    :   1.0
@Desciption :   生成传统二维码
                解析传统二维码
"""
import qrcode
from PIL import Image
from pyzbar import pyzbar

filePath = "C:\\Users\\jiaming\\Desktop\\qrcode.png"

def create_QRcode(data=''):
    """

    :return: 生成的二维码路径
    """
    print('生成传统二维码...')

    # 向二维码中填充数据
    """
    version:值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
    error_correction:控制二维码的错误纠正功能。可取值下列4个常量。
        ERROR_CORRECT_L:大约7%或更少的错误能被纠正。
        ERROR_CORRECT_M(默认):大约15%或更少的错误能被纠正。
        ROR_CORRECT_H:大约30%或更少的错误能被纠正。
        ERROR_CORRECT_Q:至多能够矫正25%的错误。
    box_size:控制二维码中每个小格子包含的像素数。
    border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值)。
    """
    qr = qrcode.QRCode(
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=4,
        border=1,
    )  # 设置图片格式
    qr.add_data(data)
    qr.make(fit=True)
    # 生成二维码
    img = qr.make_image(fill_color='black', back_color='white')
    img.save(filePath, dpi=(254.0, 254.0))
    print('保存路径:', filePath)
    return filePath


def decode_QRcode(filePath=''):
    """
    :param filePath: 待识别二维码路径
    :return: 打印出识别的结果
    """
    decode_data = pyzbar.decode(Image.open(filePath), symbols=[
        pyzbar.ZBarSymbol.QRCODE])[0].data.decode('utf-8')
    print("解码数据:", decode_data)
    return decode_data


if __name__ == "__main__":
    create_QRcode('abcdefghijkl123') # 传入参数为需要编码的数据
    decode_QRcode(filePath) # 传入参数为待识别的二维码

5. 运行结果

在这里插入图片描述

在这里插入图片描述

后记

以上就是我们今天的内容,我们可以尝试用一个交互界面来完善我们这个案例,小黑框看起来还是很难看。

在这里插入图片描述

0

1

2

3

4



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/611894/76fcd2a2be106cf843ba/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)