📜  使用 QRtools 在Python读取和生成二维码

📅  最后修改于: 2021-10-19 07:57:24             🧑  作者: Mango

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

什么是二维码?

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

安装和依赖

  1. Debian Linux:可以使用以下命令在基于 debian 的 linux 系统上安装 qrtools
    sudo apt-get update
    sudo apt-get install python-qrtools
    

    还必须安装以下依赖项

    [sudo] pip install pypng
    [sudo] pip install zbar
    [sudo] pip install pillow
    
  2. Windows: qrtools 可以通过从这里下载文件安装在 Windows 上。在下载和解压时,从文件夹内运行以下命令
    python setup.py install
    

生成二维码

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

  1. 数据
  2. 像素大小
  3. 等级
  4. 边距_大小
  5. 数据类型

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

# Python program to generate QR code
from qrtools
import QR
  
# creates the QR object
my_QR = QR(data = u"Example")
  
# encodes to a QR code
my_QR.encode()

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

print (my_QR.filename)

样本输出

/tmp/qr-1496334996.385343/7489ebbcc2a00056ddaaaac190bce473e5c03696ea1bd8ed83cf59a174283862.png

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

# Python program to generate QR code
from qrtools import QR
  
import os
my_QR = QR(data = u"Example")
my_QR.encode()
  
# command to move the QR code to the desktop
os.system("sudo mv " + my_QR.filename + " ~/Desktop")

也可以通过在创建 QR 对象期间指定值来更改 QR 码的像素值。使用智能手机上的扫描仪进行阅读时,默认尺寸往往有点小,因此对于此类用途,大约 10 的尺寸是理想的,例如:

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

下面的二维码像素大小=10,并已用URL编码

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

# use these for custom data formats eg. url, phone number, VCARD
# data should be an unicode object or a list of unicode objects
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] + ";;",
    # phonebook or meCard should be a list of tuples like this:
    # [('N', 'Name'), ('TEL', '231698890'), ...]
    'phonebook': lambda data: "MECARD:" + ";".join([":".join(i) 
                                        for i in data]) + ";"
}

从上面的代码中,我们观察了在创建二维码时可以分配和使用的各种数据类型。例如,要将书签用作数据,我们必须以列表形式提供数据,该列表由标题和 url 组成。为此,我们必须执行以下操作

# Python program to generate QR code
from qrtools import QR
  
# creates the QR object
my_QR = QR(data = [u"geeksforgeeks", u"https://www.geeksforgeeks.org/"], 
                                      data_type = 'bookmark')
  
# encodes to a QR code
my_QR.encode()

读取二维码

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

# Python program to Scan and Read a QR code
from qrtools import QR
my_QR = QR(filename = "home/user/Desktop/qr.png")
  
# decodes the QR code and returns True if successful
my_QR.decode()
  
# prints the data
print (my_QR.data)

输出 :

Example

读取二维码

我们也可以打印创建二维码对象时传递的其他参数的值来生成二维码,例如使用与文章开头生成的二维码相同的二维码,另外添加这些打印语句会得到以下附加输出

print (my_QR.data_type)
print (my_QR.pixel_size)
print (my_QR.margin_size)

输出:

text
3
4