Cómo generar códigos QR en Python

a códigos QR

“QR” en código QR significa respuesta rápida. Los códigos QR son una forma fácil y emergente de recuperar información sin escribir ni buscar nada en su teléfono. Estos códigos son esencialmente un patrón de cuadrados blancos y negros, con códigos digitales escaneables incrustados en ellos. Hoy en día, los restaurantes utilizan estos códigos QR para presentar el menú a sus clientes, las tiendas y los mercados los utilizan como una forma de pago digital sin contacto, los equipos de gestión de eventos los utilizan como un registro rápido de sus eventos y conferencias, y así sucesivamente.

Generando códigos QR

Como se mencionó anteriormente, los códigos QR se desarrollan como un patrón o una cuadrícula de pequeños cuadrados blancos y negros que almacenan información en forma binaria, es decir, como 0 y 1. La información está codificada dentro del código en arreglos especiales con la característica de personalizar los colores, el fondo y los marcos, siempre que el patrón siga siendo el mismo.

El siguiente es un ejemplo de un código QR generado utilizando el paquete “qrcode” de Python:

Enlace a mi perfil de autor de TDS (Imagen del autor)

Escanear el código anterior con un escáner que tenga capacidades de escaneo de códigos QR lo llevará a mi perfil de TDS, donde podrá acceder fácilmente a proyectos de Python para principiantes.

En este artículo, analizaremos el qrcode del paquete Python, lo instalaremos y exploraremos sus diferentes funciones para diseñar códigos QR.

Instalación del paquete

Antes de comenzar el proyecto, instalaremos los paquetes relevantes. Estoy usando PyCharm IDE para esta tarea. Para instalar el “qrcode” Pitón paquete, iré a la terminal Python y escribiré lo siguiente:

pip instalar código qr

Instalación del paquete qrcode (Imagen del autor)

La instalación del paquete QRCode nos permitirá crear códigos QR como archivos PNG y representarlos en la consola Python. Sin embargo, si necesitamos más funciones relacionadas con las imágenes, debemos instalar el paquete Pillow para las capacidades de procesamiento de imágenes.

instalación de pip “código qr[pil]”

Instalación del paquete QRCode con Pillow (Imagen del autor)

Importar biblioteca y generar un código QR simple

Ahora comenzaremos la codificación. Primero, importaremos la biblioteca e incluiremos un nombre de alias para nuestra comodidad. Como se puede ver en la documentación de QR Code Python, la imagen del código QR para una URL se puede generar y guardar fácilmente como PNG usando las siguientes líneas de código:

importar código qr como qr img = qr.make(“https://pypi.org/project/qrcode/”) img.save(“Documentación del código QR de Python.png”)

Documentación del código QR de Python (imagen del autor)

Este es un código QR simple que se creó usando la función make() y se guardó como un archivo PNG usando la función save().

Funcionalidad avanzada

Para funciones avanzadas de procesamiento de imágenes, utilizaremos la clase QRCode en el paquete qrcode Python.

Las clases y los objetos son un concepto útil en programación. Las clases de Python proporcionan un modelo para la creación de objetos que comparten características similares, sus atributos (variables) y métodos (funciones). Usaremos el constructor de clases Python para crear códigos QR como objetos de esa clase.

A continuación se muestra el código genérico que nos permite crear y guardar códigos QR:

importar qrcode qr = qrcode.QRCode( versión=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(‘https://towardsdatascience.com/implementing-the-coffee-machine-project-in-python-using-object-orientated-programming/’) qr.make(fit=True) img = qr.make_image(fill_color=”negro”, back_color=”blanco”) img.save(“Comprensión de clases y objetos.png”)

Comprensión de clases y objetos en Python (imagen del autor)

El código anterior ha creado y guardado el código QR como PNG. Si escanea el código anterior, llegará a un interesante tutorial de Python que explora cómo se implementa el concepto de clases y objetos de Python en proyectos del mundo real.

Ahora, profundicemos en el código genérico anterior y exploremos las funciones y juguemos con sus variaciones.

Creación de objetos

La primera línea de código después de importar la biblioteca qrcode crea el objeto, con sus atributos y métodos entre corchetes.

qr = qrcode.QRCode( … … … … … )

Aquí, qrcode se refiere al paquete Python y QRCode() se refiere a la Clase.

Definiendo la versión

Lo siguiente es definir la versión. Podemos configurar el número entero de 1 a 40, y esto dará como resultado diferentes tamaños del Código QR.

importar qrcode qr = qrcode.QRCode( versión=1, … … … … )

Creemos un código QR con la variable de versión configurada en 5.

Atributo de versión establecido en 5 (Imagen del autor)

Ahora establezcamos el parámetro de versión en 15:

Atributo de versión establecido en 15 (Imagen del autor)

Como se puede ver en los dos códigos QR anteriores, el atributo de versión determina el tamaño del código QR. La versión 1 más pequeña genera un código QR como una cuadrícula de 21 × 21.

Corrección de errores

El siguiente atributo que veremos es error_correction. El atributo de Corrección de errores se ocupa de la redundancia de datos, de modo que incluso si el código QR está dañado, aún se puede escanear. Hay 4 niveles diferentes de error_correction:

Corrección de errores L: proporciona el nivel más bajo de corrección de errores, es decir, 7 % Corrección de errores M: proporciona un nivel moderado de corrección de datos, 15 % o menos, proporcionando así un equilibrio entre la corrección de errores y el tamaño de los datos Corrección de errores Q: proporciona un 25 % o menos de corrección de errores Corrección de errores H: proporciona un alto nivel de corrección de errores y es adecuado para aplicaciones que pueden tener daños graves y donde el tamaño de los datos no es una preocupación. qr = qrcode.QRCode( versión=1, error_correction=qrcode.constants.ERROR_CORRECT_L, … … )

Cuanto mayor sea el valor porcentual de error_correction, más fácilmente se podrá escanear, incluso cuando algunas partes estén dañadas. Por otro lado, los códigos QR aumentan de tamaño, y esto plantea un problema cuando la compresión de datos es el requisito principal.

Creemos códigos QR con diferentes tipos de corrección de error.

Corrección de errores tipo L (Imagen del autor)
Corrección de errores tipo M (Imagen del autor)
Corrección de errores tipo Q (Imagen del autor)
Corrección de errores tipo H (Imagen del autor)

Como se puede ver en la variedad de códigos QR generados anteriormente, a medida que aumenta la corrección de error, aumenta la complejidad de los códigos QR, lo que significa que aumenta el tamaño de los datos, mientras que la redundancia de datos también aumenta.

Tamaño de la caja

El siguiente atributo que exploraremos y con el que jugaremos es box_size. El tamaño del cuadro en la biblioteca qrcode de Python se refiere a la cantidad de píxeles que tendrá el código QR.

qr = qrcode.QRCode(versión=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, …)

Veamos cómo cambia nuestro Código QR con diferentes valores de box_size:

Tamaño de caja = 1 (Imagen del autor)
Tamaño de caja = 100 (Imagen del autor)
Variación de box_size (Imagen del autor)

Las imágenes de arriba demuestran la diferencia cuando cambian los valores de los píxeles, aunque pueden ser insignificantes a simple vista cuando se trata de pequeñas diferencias.

Borde

El último atributo que necesitamos definir para crear el objeto es el borde. Esto se refiere al cuadro que rodea el código. El valor mínimo es 4 y podemos aumentarlo tanto como queramos. Veamos cómo cambia el código con cambios en este atributo:

Borde = 4 (Imagen del autor)
Borde = 10 (Imagen del autor)

Podemos ver la diferencia en el borde de las imágenes de arriba, que se puede personalizar fácilmente con la variable de borde.

Agregar datos

Una vez creado nuestro objeto, con valores particulares de versión, tipo de corrección de error, tamaño de caja y borde, ahora agregaremos los datos que deben codificarse como código QR. Estos datos pueden ser una cadena, una URL, una ubicación, información de contacto, etc. Esto se puede hacer fácilmente mediante el método add_data() de esta clase.

importar qrcode qr = qrcode.QRCode (versión = 1, error_correction = qrcode.constants.ERROR_CORRECT_L, box_size = 1, borde = 10,) qr.add_data(‘https://towardsdatascience.com/building-a-facial-recognition-model-using-pca-svm-algorithms-c81d870add16/’) qr.make(fit=True)

La última línea de código anterior llama a qr.make(fit=True). Este ajusta automáticamente el Código QR a los datos que se han dado, luego de analizarlos. Utiliza el código QR más pequeño posible para acomodar los datos y no requiere que configuremos manualmente los atributos de tamaño.

Generando el objeto de imagen

Una vez creado el objeto Código QR, usaremos PIL para generar la imagen mientras definimos sus colores, así como guardar esa imagen de forma adecuada. En el siguiente ejemplo, estableceremos el fondo en negro y el color de relleno en rosa en nuestro código QR, como se puede ver en el siguiente código:

importar qrcode qr = qrcode.QRCode( versión=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=1, border=10, ) qr.add_data(‘https://towardsdatascience.com/using-python-to-build-a-calculator/’) qr.make(fit=True) img = qr.make_image(fill_color=”rosa”, back_color=”negro”) img.save(“calc.png”)

Configuración de color para código QR (Imagen del autor)

Conclusión

En este artículo, exploramos el código QR del paquete Python, que incluye el modelo para crear códigos QR y guardarlos en diferentes formatos de archivo. También incluye personalización avanzada de la generación de códigos QR, que hemos realizado con la comprensión de clases y objetos. Este fue un tutorial de Python fácil y apto para principiantes que requirió cierto conocimiento superficial de clases y objetos.