Lectura y generación de códigos QR en Python usando QRtools

Este artículo tiene como objetivo presentar el uso de la biblioteca de python: qrtools. Esta biblioteca se puede utilizar tanto para leer códigos QR como para generarlos.

¿Qué son los códigos QR?

El código QR, o código de respuesta rápida, es una marca comercial para un tipo de código de barras bidimensional. Los códigos de barras bidimensionales son similares a los códigos de barras unidimensionales, pero pueden almacenar más información por unidad de área.

Instalación y Dependencias

  1. Debian Linux: qrtools se puede instalar en sistemas Linux basados ​​en Debian con los siguientes comandos
    sudo apt-get update
    sudo apt-get install python-qrtools
    

    Las siguientes dependencias también deben estar instaladas

    [sudo] pip install pypng
    [sudo] pip install zbar
    [sudo] pip install pillow
    
  2. Windows: qrtools se puede instalar en Windows descargando el archivo desde aquí . Al descargar y extraer, ejecute el siguiente comando desde dentro de la carpeta
    python setup.py install
    

Generar un Código QR

qrtools contiene una clase QR (se puede ver en el código fuente), para la cual inicialmente debemos crear un objeto. El objeto toma los siguientes argumentos

  1. datos
  2. tamaño_píxel
  3. nivel
  4. margen_tamaño
  5. tipo de datos

Para crear un código QR con la configuración predeterminada, simplemente debemos especificar los datos al crear el objeto. Tenga en cuenta que los datos deben ser un objeto Unicode si se van a utilizar objetos que no sean ASCII.

# 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()

Si el programa se ejecuta correctamente, devuelve un valor de 0 y el código QR se almacena en la carpeta tmp. Para saber la ubicación exacta, use el siguiente comando

print (my_QR.filename)

Salida de muestra

/tmp/qr-1496334996.385343/7489ebbcc2a00056ddaaaac190bce473e5c03696ea1bd8ed83cf59a174283862.png

Este archivo ahora se puede mover a otra carpeta según nuestra conveniencia

# 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")

El valor de píxel del código QR también se puede cambiar especificando el valor durante la creación del objeto QR. El tamaño predeterminado tiende a ser un poco pequeño para leer usando escáneres en teléfonos inteligentes, por lo que un tamaño de alrededor de 10 sería ideal para tales propósitos, por ejemplo:

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

El siguiente código QR tiene un tamaño de píxel = 10 y se ha codificado con una URL

También podemos agregar datos de correo electrónico, datos de sms, datos de mms, marcadores, etc. al código QR. El siguiente extracto de código se toma del código fuente, que especifica los distintos tipos de datos que se pueden usar junto con el formato de los datos que se requerirían para su uso:

# 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]) + ";"
}

A partir del código anterior, observamos los diversos tipos de datos que se pueden asignar y utilizar al crear códigos QR. Por ejemplo, para utilizar un marcador como dato, debemos proporcionar los datos en forma de lista, que consta de un título y la url. Para lograr esto, debemos hacer lo siguiente

# 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()

Leer un código QR

Escanear y leer un código QR es relativamente simple. Al crear el objeto QR, simplemente debemos especificar la ruta al código QR como argumento. Supongamos que estamos tratando de decodificar el código QR creado al principio del artículo.

# 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)

Producción :

Example

Read a QR code

También podemos imprimir los valores de los otros parámetros pasados ​​al crear el objeto QR para generar el código QR, por ejemplo, usando el mismo código QR generado al principio del artículo, además, agregar estas declaraciones de impresión daría el siguiente resultado adicional

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

Producción:

text
3
4

Este artículo es una contribución de Deepak Srivatsav . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *