zoukankan      html  css  js  c++  java
  • Python3+qrcode+zxing生成和识别二维码教程

    一、安装依赖库

    pip install qrcode pillow image zxing

    pillow是python3中PIL的代替库,image是生成图版需要用到的库

    安装image时报错“Could not install packages due to an EnvironmentError: [Errno 22] invalid mode ('wb') or filename”,没管,直接在pycharm的setting中安装就没报错了。

    二、使用qrcode生成二维码

    2.1 qrcode简单用法

    以下是生成指向百度的二维码为例,用户扫描后会访问百度首页。代码如下。

    另外注意我们日常使用是扫一个二维码就跳转到某个页面。但本质而言,扫二维码就是得到内容,而不会跳转什么页面。

    比如微信等扫以下二维码就是得到“https://www.baidu.com”,至于自动跳到百度首页是因为微信添加了如果扫描二维码结果是url就自动跳转的代码造成的。

    也就是说二维码的内容完全可以不是url,而是“abcd”等仍意字符串,用微信扫时显示“abcd”而不是跳转什么页面而已。

    不过由于二维码(指qr code)的容量是有限的,只有几百到几千个字节,所以一般不会直接用来存图片等内容。

    import qrcode
    
    # 二维码内容
    data = "https://www.baidu.com"
    # 生成二维码
    img = qrcode.make(data=data)
    # 直接显示二维码
    img.show()
    # 保存二维码为文件
    # img.save("baidu.jpg")

    生成二维码如下:

    2.2 qrcode高级用法

    所谓高级用法,就是设置二维码大小、颜色等参数的写法。示例代码如下,其中实例化参意义如下:

     version参数----二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177

    error_correction参数----二维码错误容许率,默认ERROR_CORRECT_M,容许小于15%的错误率

    box_size参数----二维码每个小格子包含的像素数量

    border参数----二维码到图片边框的小格子数,默认值为4

    (不太确定是不是都对,可直接查看官方说明:https://github.com/lincolnloop/python-qrcode#advanced-usage

    import qrcode
    # 实例化二维码生成类
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    # 设置二维码数据
    data = "https://www.baidu.com"
    qr.add_data(data=data)
    
    # 启用二维码颜色设置
    qr.make(fit=True)
    img = qr.make_image(fill_color="green", back_color="white")
    
    # 显示二维码
    img.show()

    生成二维码如下:

    三、使用zxing识别二维码

    3.1 zxing报错处理

    google流行的是使用qrtools来读二维码,但是qrtools依赖zbar不兼容python3,其替代品zbarlight在windows安装又很麻烦,直接放弃了。

    又回头折腾百度上流行的zxing,zxing一直报”python zxing OSError: [WinError 6] 句柄无效“,直接搜“if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:”。看到这篇文章说windows上报这个错可以直接“注释掉subprocess.py中的 _cleanup()方法”。虽然说的不是zxing,但库是一样的,姑且一试还真可以。

    如下图所示,将_cleanup()直接注释掉:

     3.2 zxing识别二维码代码

    import zxing
    
    reader = zxing.BarCodeReader()
    barcode = reader.decode("baidu.jpg")
    print(barcode.parsed)

    3.3 运行示例

    使用2.1中的代码生成并保存二维码,解析运行结果如下:

    参考:

    https://github.com/lincolnloop/python-qrcode

    https://www.cnblogs.com/sfnz/p/5457862.html

    https://github.com/dlenski/python-zxing

    https://baijiahao.baidu.com/s?id=1586194723484285133&wfr=spider&for=pc

  • 相关阅读:
    JavaScript教程——JavaScript 的基本语法(标识符)
    ECMAScript 6 入门——ES6 声明变量的六种方法
    JavaScript教程——数据类型概述
    对称机密算法与非对称机密算法
    C语言提高 (2) 第二天 用指针对字符串进行操作
    C语言提高 (1) 第一天 数据类型本质与内存四区
    关于内存地址和内存空间的理解(转)
    为什么对数组处理的函数需要传递数组长度
    Unicode编码,解释UCS、UTF、BMP、BOM等名词
    上海
  • 原文地址:https://www.cnblogs.com/lsdb/p/9728621.html
Copyright © 2011-2022 走看看