📜  使用QRtools在Python中读取和生成QR代码

📅  最后修改于: 2020-04-16 05:49:12             🧑  作者: Mango

本文旨在介绍Python库的使用:qrtools。该库可用于读取和生成QR码。

什么是QR码?

QR码或快速响应码是一种二维条形码的商标。二维条形码类似于一维条形码,但是每单位面积可以存储更多信息。

安装和依赖性

1,Debian Linux:可以使用以下命令将qrtools安装在基于debian的linux系统上

sudo apt-get update
sudo apt-get install Python-qrtools

还必须安装以下依赖项:

[sudo] pip install pypng
[sudo] pip install zbar
[sudo] pip install pillow

2, Windows:通过从此处下载文件,可以在Windows上安装qrtools 。在下载和解压缩时,从文件夹内部运行以下命令:

Python setup.py install

产生QR码

qrtools包含一个QR类(可以在源代码中查看),我们必须首先为其创建一个对象。该对象采用以下参数

  1. data
  2. pixel_size
  3. level
  4. margin_size
  5. data_type

要使用默认设置创建QR码,我们必须在创建对象时简单地指定数据。请注意,如果要使用非ASCII对象,则数据必须是unicode对象.

# Python 2.x程序生成QR码
from qrtools
import QR
# 创建QR对象
my_QR = QR(data = u"Example")
# 编码为QR码
my_QR.encode()

如果程序成功运行,则返回值0,QR码存储在tmp文件夹中。要知道确切的位置,请使用以下命令:

print my_QR.filename

输出:

/tmp/qr-1496334996.385343/7489ebbcc2a00056ddaaaac190bce473e5c03696ea1bd8ed83cf59a174283862.png


现在可以根据我们的方便将该文件移动到另一个文件夹

# Python 2.x程序生成QR码
from qrtools import QR
import os
my_QR = QR(data = u"Example")
my_QR.encode()
# 将QR码移动到桌面的命令
os.system("sudo mv " + my_QR.filename + " ~/Desktop")

QR码的像素值也可以通过在QR对象的创建期间指定值来改变。对于使用智能手机上的扫描仪进行读取,默认大小通常会小一些,因此,大约10英寸的大小非常适合此类用途,例如:

my_QR = QR(data = u"example", pixel_size = 10)

以下QR码的像素大小= 10,并且已使用URL进行了编码



我们还可以将电子邮件数据,短信数据,彩信数据,书签等添加到QR码。以下代码摘录来自源代码,该代码指定了可以使用的各种数据类型以及使用它们所需的数据格式:

# 将这些用于自定义数据格式,例如。 url,电话号码,VCARD
# 数据应为unicode对象或unicode对象列表
data_encode = {
    'text': lambda data: data,
    'url': encode_url,
    'email': lambda data: 'mailto:' + re.compile(
        r'^mailto:', re.IGNORECASE
    ).sub('', data),
    'emailmessage': lambda data: 'MATMSG:TO:' + data[0] + ';SUB:' + data[1] +
                           ';BODY:' + data[2] + ';;',
    'telephone': lambda data: 'tel:' + re.compile(
        r'^tel:', re.IGNORECASE
    ).sub('', data),
    'sms': lambda data: 'SMSTO:' + data[0] + ':' + data[1],
    'mms': lambda data: 'MMSTO:' + data[0] + ':' + data[1],
    'geo': lambda data: 'geo:' + data[0] + ', ' + data[1],
    'bookmark': lambda data: "MEBKM:TITLE:" + data[0] + ";URL:" +
                                    data[1] + ";;",
    # 电话簿或meCard应该是这样的元组列表:
    # [('N', 'Name'), ('TEL', '231698890'), ...]
    'phonebook': lambda data: "MECARD:" + ";".join([":".join(i)
                                        for i in data]) + ";"
}/* Your code... */

从上面的代码中,我们观察到在创建QR码时可以分配和使用的各种数据类型。例如,要将书签用作数据,我们必须提供数据作为列表,包括标题和url。为此,我们必须执行以下操作:

# Python 2.x程序生成QR码
from qrtools import QR
# 创建QR对象
my_QR = QR(data = [u"芒果文档", u"https://www.芒果文档.org/"],
                                      data_type = 'bookmark')
# 编码为QR码
my_QR.encode()print my_QR.data

读取QR码

扫描和读取QR码相对简单。创建QR对象时,我们必须简单地指定QR代码的路径作为参数。假设我们正在尝试解码本文开头创建的QR码.

# 用于扫描和读取QR码的Python 2.x程序e
from qrtools import QR
my_QR = QR(filename = "home/user/Desktop/qr.png")
# 解码QR码,如果成功,则返回True
my_QR.decode()
# 打印数据
print my_QR.data

输出:

Example


我们还可以打印在创建QR对象以生成QR码时传递的其他参数的值,例如,使用在文章开头生成的相同QR码,另外添加这些打印语句将提供以下附加输出:

print my_QR.data_type
print my_QR.pixel_size
print my_QR.margin_size

输出:

text
3
4