Código QR generado con PHP

Crear códigos QR con PHP y qr code

Generar imagen de código QR con PHP

Ya vimos cómo generar códigos de barras con PHP, ahora vamos a ver cómo crear códigos QR con PHP. Me parece que los códigos QR o QR codes pueden llevar más datos y metadatos, y que son legibles por la mayoría de dispositivos inteligentes (de hecho ya programamos un lector de códigos QR con Android).

Veamos entonces cómo generar estos códigos QR en forma de imagen, darles color de fondo, tamaño, calidad y muchas cosas más con una librería llamada qr code que puedes encontrar aquí.

Nota: recuerda que ya hicimos esto con AngularJS.

Composer y la librería qr code

Si no tienes composer, mira aquí cómo instalarlo. En caso de que no quieras usar Composer, te invito a ver las ventajas de usarlo y una introducción al mismo.

Por otro lado, si ya tienes un proyecto de PHP y quieres adaptarlo a Composer, mira este artículo.

Luego de que composer esté instalado y listo para ser llamado, instala qr code con:

composer require endroid/qr-code

Espera a que se instale, incluye el autoload en donde sea necesario y ya podemos comenzar a generar códigos QR.

Primer código QR generado con PHP

Veamos un primer acercamiento al generador de códigos QR. En este caso vamos a generar una imagen con el código QR y la vamos a mostrar en el navegador.

<?php
/**
 * Ejemplo 1 para generar códigos QR
 * con PHP
 *
 * @author parzibyte
 */

# Cargar autoload de Composer
require_once "vendor/autoload.php";

# Indicar que usaremos el namespace de QRCode
use Endroid\QrCode\QrCode;

# El texto que pondremos
$texto = "Generando códigos QR con PHP desde parzibyte.me";
$codigoQR = new QrCode($texto);

header('Content-Type: ' . $codigoQR->getContentType());
echo $codigoQR->writeString();

Declaramos que vamos a usar la clase QrCode de Endroid\QrCode y luego creamos una instancia de la misma pasándole el texto o mensaje que queremos guardar en el código QR.

Finalmente, para mostrarlo en el navegador enviamos un encabezado especial y luego imprimimos el código QR, generando así una imagen.

La salida es esta:

Primer código QR generado con PHP
Primer código QR generado con PHP

Con eso hemos generado nuestro primer código QR. Veamos más ejemplos.

Forzar descarga de código QR con PHP

En este ejemplo vamos a hacer que el código QR sea descargado en lugar de ser mostrado. El código PHP queda así:

<?php
/**
 * Ejemplo 2 para generar códigos QR
 * con PHP y forzar la descarga
 *
 * @author parzibyte
 */

# Cargar autoload de Composer
require_once "vendor/autoload.php";

# Indicar que usaremos el namespace de QRCode
use Endroid\QrCode\QrCode;

# El texto que pondremos
$texto = "Generando códigos QR con PHP desde parzibyte.me";
$codigoQR = new QrCode($texto);

# Sugerir nombre de código al guardar
$nombreArchivo = "codigo_qr.png";
header('Content-Type: ' . $codigoQR->getContentType());
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=$nombreArchivo");
echo $codigoQR->writeString();

Recomiendo ver cómo forzar la descarga de un archivo con PHP. Lo que se hace es agregar dos encabezados extra para indicar al navegador que debe descargarlo en lugar de intentar mostrarlo.

Si visitamos el ejemplo, se descargará el código QR.

Guardar código QR en el disco duro

Tal vez en algún momento se necesite guardar el código QR en lugar de mostrarlo o forzar su descarga. Para ello, el creador de la librería ha creado el método writeFile de la clase QrCode que acepta la ruta absoluta.

Vamos a ver un ejemplo en donde generamos el código QR y lo guardamos en el sistema de archivos.

<?php
/**
 * Ejemplo 3 para generar códigos QR
 * con PHP y guardar el resultado en
 * un archivo
 *
 * @author parzibyte
 */

# Cargar autoload de Composer
require_once "vendor/autoload.php";

# Indicar que usaremos el namespace de QRCode
use Endroid\QrCode\QrCode;

# El texto que pondremos
$texto = "Generando códigos QR con PHP desde parzibyte.me";
$codigoQR = new QrCode($texto);

# La ruta en donde se guardará el código
$nombreArchivoParaGuardar = "codigo_qr.png";
# Escribir archivo
$codigoQR->writeFile($nombreArchivoParaGuardar);

Si todo va bien, entonces tendremos una imagen en la ruta en donde el script fue ejecutado.

Personalizar códigos QR

Ya vimos cómo guardar, mostrar o descargar los códigos QR pero no hemos visto otras importantes cosas que podemos hacer. Vamos a ver algunas cosas que podemos cambiar del código, como el tamaño, color, etiqueta y otras cosas.

Recuerda que puedes ver todas las opciones en el repositorio. Abajo explicaré algunas personalizaciones más importantes y al final pondré el código PHP necesario así como el código QR generado.

Tamaño del código QR

Esto es especificado en pixeles, el argumento que se pasa debe ser entero y eso definirá tanto la anchura como la altura del código QR, pues es un cuadrado.

El método es setSize.

Márgenes del código QR

Igual se puede agregar un margen al código, que va desde 0 hasta el número que quieras (respetará el tamaño del código QR, es decir, es independiente). Llama a la función setMargin para configurarlo.

Codificación

Al menos yo hablo español, y con el español tenemos letras ñ, acentos y todas esas cosas. Así que el UTF 8 viene a salvarnos en muchos casos. Por ello es que si vas a usar unas de estas cosas pongas la codificación del código QR con setEncoding.

Logotipo

En el centro del código QR podemos agregar otra imagen que será el logotipo o logo. Para alcanzar esto se llama a setLogoPath, pasando la ruta de la imagen.

Si quieres modificar el tamaño (este no debe ser cuadrado) llama a setLogoSize($anchura, $altura).

Colores

Los colores se definen con un arreglo que tiene las claves r, g, b y a. Las tres primeras letras son de los niveles rojo, verde y azul. La última es del alpha, va del 0 al 127 y entre mayor alpha obtienes más transparencia.

No recomiendo dejar la transparencia en un valor alto, pues tal vez haya problemas con la lectura.

Pero bueno, una vez definidos los colores, llamamos a setBackgroundColor para el color de fondo y setForegroundColor para el color del primer plano.

Etiqueta

En el pie del código QR podemos agregar una etiqueta o mensaje llamando a setLabel($texto, $tamanioDeLaFuente, $rutaDeLaFuente, $alineacion).

El texto es una cadena, el tamaño de la fuente es el tamaño en pixeles que se va a usar para escribir el mensaje.

La ruta de la fuente es la ubicación de la fuente con extensión otf, y finalmente la alineación puede ser a la izquierda, en el centro o a la derecha.

Código QR generado al final

Bueno, este es el resultado final. Que quede claro que fue para mostrar la personalización y no espero que sea legible o agradable.

Código QR generado con PHP
Código QR generado con PHP

El código de PHP que ocupé fue este:

<?php
/**
 * Ejemplo 4 para generar códigos QR
 * con PHP y personalizar el resultado
 *
 * @author parzibyte
 */

# Cargar autoload de Composer
require_once "vendor/autoload.php";

# Indicar que usaremos el namespace de QRCode
use Endroid\QrCode\LabelAlignment;

# Esto es para las constantes de la alineación de la etiqueta
use Endroid\QrCode\QrCode;

# El texto que pondremos
$texto = "Generando códigos QR con PHP desde parzibyte.me";
$codigoQR = new QrCode($texto);

/**
 * ============================================================
 * |        De aquí en adelante todo es personalización       |
 * ============================================================
 */
# Tamaño del código en pixeles (recuerda que es cuadrado),
# mayor tamaño requiere más tiempo de generación
$codigoQR->setSize(400);

# El margen, comienza desde 0 y
# puede ser incluso mayor que el tamaño del código
$codigoQR->setMargin(0);

# Codificación, útil cuando ponemos acentos o
# caracteres especiales
$codigoQR->setEncoding("UTF-8");

# Si queremos, podemos agregar un logotipo
$rutaDelLogotipo = "logotipo.jpg";
$codigoQR->setLogoPath($rutaDelLogotipo);
# Tamaño del logo. Anchura, altura en pixeles
$codigoQR->setLogoSize(50, 50);

# Color de fondo. La a es de alpha, va de 0 a 127
# Mayor alfa es mayor transparencia
$colorDeFondo = ['r' => 39, 'g' => 40, 'b' => 34, 'a' => 0];
$codigoQR->setBackgroundColor($colorDeFondo);

# Color del primer plano
# Lo de la a de alpha aplica igual que el del color de fondo
$colorPrimerPlano = ['r' => 166, 'g' => 226, 'b' => 46, 'a' => 0];
$codigoQR->setForegroundColor($colorPrimerPlano);

# También podemos poner una etiqueta
$textoEtiqueta = "Escanea este fabuloso código QR [parzibyte.me]";
$tamanioTextoEtiqueta = 10; # En pixeles
$rutaFuenteParaEtiqueta = "MontserratAlternates-Regular.otf";
# La alineación puede ser LEFT, CENTER y RIGHT
$alineacion = LabelAlignment::CENTER;
$codigoQR->setLabel($textoEtiqueta, $tamanioTextoEtiqueta, $rutaFuenteParaEtiqueta, $alineacion);

# Para ejemplos de simplicidad, mostramos en código en el navegador
header('Content-Type: ' . $codigoQR->getContentType());
echo $codigoQR->writeString();

Y así es como terminamos por hoy. Lee más sobre PHP aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

5 comentarios en “Crear códigos QR con PHP y qr code”

  1. Hola, muchas gracias por como lo explicas! te hago una consulta he visto en la libreria phpqrcode que podes configurar la calidad del codigo qr, como puedo tambien modificar la calidad o no se puede?

Dejar un comentario

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