如何使用Python创建和解码QR码

QR码(快速响应码)是一种存储编码数据的矩阵条形码。它被称为“快速响应代码”,因为它能够立即存储和访问大数据。您可以在任何地方找到这些QR码:海报,杂志,电影院大厅,网站,体育馆,广告等。

使用Python,您可以生成自己的QR码,对其进行自定义并从QR码中解码信息。

设置Python环境

建议为Python项目设置一个隔离的环境。通过这样做,您可以了解有关项目依赖项的更多信息。

创建虚拟环境

您可以通过多种方式在Python创建虚拟环境:virtualenv,virtualenvwrapper或Anaconda发行版。在这里,我们将使用virtualenv创建虚拟环境。

  1. 使用mkdir [Folder]命令在您要创建此项目的位置创建一个文件夹。
  2. 在命令提示符下键入cd [Folder]进入新目录。
  3. 键入virtualenv [Environment Name]创建一个虚拟环境。
  4. 通过键入[Environment Name] Scripts activate激活虚拟环境

安装必需的软件包

使用pip命令安装所需的Python软件包。确保您的系统上安装pip

在命令提示符下运行以下命令。

 pip3 install opencv-python qrcode numpy Image

如果您不想一次性安装所有软件包,则可以按以下步骤一个接一个地安装它们:

 pip3 install opencv-python

这将安装opencv-python软件包,该软件包主要用于计算机视觉,机器学习和图像处理。

 pip3 install qrcode

这将安装用于生成和读取QR码的qrcode python软件包。

 pip3 install numpy

这将安装用于处理数组的numpy python软件包。

 pip3 install Image

这将安装Image python软件包,该软件包提供了许多功能来从文件中加载图像并创建新图像。

产生QR码

要生成代码,请创建一个扩展名为.py的新文件,该文件将具有生成QR码的代码。

将以下代码粘贴到您的Python文件中,然后运行该程序。

 import qrcode
# Data for which you want to make QR code
# Here we are using the URL of the website
data = "https://www.makeuseof.com/"
# File name of the QR code Image
# Change it with your desired file name
QRCodefile = "MUOQRCode.png"
# Generating the QR code
QRimage = qrcode.make(data)
# Saving image into a file
QRimage.save(QRCodefile)

这将为给定的数据(在本例中为www.makeuseof.com )创建一个QR码图像(MUOQRCode.png)。生成的QR码将如下所示:

生成定制的QR码

您可以使用qrcode库的惊人功能来自定义QR码。您可以更改QR码的填充颜色,背景颜色,图像大小,框大小和边框厚度。

更改图像和包装盒尺寸

您可以使用QRCode类中的version参数更改QR码图像的大小。它接受1到40之间的整数,其中1等效于21×21矩阵,40等效于185×185矩阵。请注意,数据不符合指定的大小,版本将自动扩大。

同样,您可以使用QRCode类中的box_size参数更改框的大小。它指定QR码中每个框的像素。

 # Importing libraries
import qrcode
import numpy as np
# Data which for you want to make QR code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR code Image file
QRCodefile = "CustomisedImgBoxQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(version=1, box_size=12)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)
# print the image size (version)
print("Size of the QR image(Version):")
print(np.array(qrObject.get_matrix()).shape)

将生成以下QR码图像文件:

另外,将显示以下输出:

 Size of the QR image(Version):
(33, 33)

请注意,版本会根据数据的大小自动扩大。

更改填充颜色

您可以使用fill_color参数更改QR码的填充颜色。

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedFillColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(fill_color="red")
# Saving image into a file
image.save(QRCodefile)

将生成以下QR码图像文件:

改变背景颜色

您可以使用back_color参数更改QR码的背景颜色。

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBGColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(back_color="blue")
# Saving image into a file
image.save(QRCodefile)

将生成以下QR码图像文件:

更改边框厚度

您可以使用QRCode类中的border参数来更改QR码的边框粗细。

 # Importing libraries
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBorderQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(border=10)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)

将生成以下QR码图像文件:

使用QR码图像解码QR码

您可以使用Python的OpenCV库从QR码图像中解码信息。 OpenCV具有内置的QR码检测器。使用检测器,您可以从QR码中解码出数据。

 # Import Library
import cv2
# Name of the QR Code Image file
filename = "MUOQRCode.png"
# read the QRCODE image
image = cv2.imread(filename)
# initialize the cv2 QRCode detector
detector = cv2.QRCodeDetector()
# detect and decode
data, vertices_array, binary_qrcode = detector.detectAndDecode(image)
# if there is a QR code
# print the data
if vertices_array is not None:
print("QRCode data:")
print(data)
else:
print("There was some error")

如果提供的图像是有效的QR码,则将显示解码后的数据。在这种情况下,将生成以下输出-

 QRCode data:
https://www.makeuseof.com/

使用网络摄像头实时解码QR Code

大多数时候,人们倾向于使用网络摄像头来扫描QR码。利用Python和OpenCV库的潜力,您可以轻松地从QR码解码数据。

 import cv2
# initalize the camera
cap = cv2.VideoCapture(0)
# initialize the OpenCV QRCode detector
detector = cv2.QRCodeDetector()
while True:
_, img = cap.read()
# detect and decode
data, vertices_array, _ = detector.detectAndDecode(img)
# check if there is a QRCode in the image
if vertices_array is not None:
if data:
print("QR Code detected, data:", data)
# display the result
cv2.imshow("img", img)
# Enter q to Quit
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()

当您执行此代码时,您的网络摄像头将自动打开。只需将QR码放在网络摄像头的前面,数据将被解码并显示在命令提示符下。

轻松编码和解码QR码

使用本文,您可以根据需要轻松地对QR码进行编码,解码和自定义。您甚至可以使用提供的代码创建完整的QR码Scanner-Generator应用程序。

多种使用QR码创新方法。发挥创意并根据需要使用QR码。