GENERAR CÓDIGOS QR CON PHP: GUÍA Y EJEMPLOS

Un código QR (siglas de Quick Response o respuesta rápida) es un tipo de código de barras bidimensional que almacena información que puede ser leída de forma instantánea por un dispositivo móvil, como un smartphone. Estos códigos, formados por un patrón de cuadrados blancos y negros, pueden contener desde enlaces a sitios web, información de contacto, mensajes de texto y correos electrónicos, hasta detalles de aplicaciones o información para pagos. Para generar códigos QR con PHP se puede usar la librería PHP QR Code (también conocido como PHPQRCODE).
PHPQRCODE es una biblioteca open source (bajo licencia LGPL) para generar códigos QR en PHP. Se basa en la biblioteca C libqrencode y permite crear imágenes de códigos QR en formatos PNG o JPEG (usando la extensión GD2 de PHP). Es ideal para aplicaciones web donde necesitas generar QR dinámicamente, como enlaces a sitios, datos de contacto o información personalizada.

Ejemplos de uso en español

Ejemplo 1: Generar QR y mostrarlo directamente en el navegador. El siguiente código genera un QR con un texto simple y lo muestra en la página.

// Incluir la librería
include 'phpqrcode/qrlib.php';

// Datos para el QR (puede ser un URL, texto, etc.)
$texto = 'Visita: https://blogprog.gonzalolopez.es;
// Generar y mostrar el QR directamente (salida PNG en el navegador)
QRcode::png($texto);
  • QRcode::png($texto): Crea el QR con los datos "$texto" y lo envía al navegador como imagen PNG.
  • Para verlo, guarda esto en un archivo php y ejecútalo en tu servidor.
  • Salida: Una imagen QR legible que, al escanear, muestra el texto o URL.
Ejemplo 2: Guardar el QR como archivo de imagen Aquí se genera el QR y guardarlo en una carpeta específica.

// Incluir la librería
include 'phpqrcode/qrlib.php';

// Datos para el QR
$texto = "GEEKS FOR GEEKS - Ejemplo en español";

// Ruta donde guardar la imagen (crea la carpeta 'imagenes/' si no existe)
$ruta = 'imagenes/';
$archivo = $ruta . uniqid() . ".png";  // Nombre único para evitar sobrescribir

// Parámetros opcionales:
$ecc = 'L'; // Nivel de corrección de errores: L (bajo, 7%), M (15%), Q (25%), H (30%)
$pixelSize = 10; // Tamaño de cada píxel (1-10, más grande = mejor legibilidad)
$frameSize = 4;  // Margen alrededor del QR (1-10)

// Generar y guardar el QR
QRcode::png($texto, $archivo, $ecc, $pixelSize, $frameSize);

// Mostrar la imagen guardada en la página
echo "
";
  • uniqid(): Genera un ID único para el nombre del archivo.
  • Parámetros como $ecc permiten tolerar errores (por ejemplo, si agregas un logo encima).
  • La imagen se guarda en "imagenes/mi_id_unico.png" y se muestra con la etiqueta img de html.
  • Salida: Un archivo PNG guardado y visible en la página. Escanéalo con tu teléfono para verificar.
Ejemplo 3: Agregar un logo al QR para hacer el QR más atractivo, se puede superponer una imagen. Esto requiere un nivel de corrección alto para que siga siendo legible.

// Incluir la librería
include 'phpqrcode/qrlib.php';

// Datos para el QR
$codeContents = 'https://mi-sitio.com';

// Ruta del archivo QR generado
$filepath = 'qr_con_logo.png';

// Generar QR base con alto nivel de corrección
QRcode::png($codeContents, $filepath, QR_ECLEVEL_H, 10);

// Cargar el QR como imagen
$QR = imagecreatefrompng($filepath);

// Cargar el logo (debe ser cuadrado y pequeño)
$logo = imagecreatefromstring(file_get_contents('logo.png'));  // Reemplaza con tu logo
$logoSize = 50;  // Tamaño del logo en píxeles

// Dimensiones del QR
$QR_width = imagesx($QR);
$QR_height = imagesy($QR);

// Calcular posición central para el logo
$logo_x = ($QR_width - $logoSize) / 2;
$logo_y = ($QR_height - $logoSize) / 2;

// Redimensionar logo si es necesario
imagecopyresampled($QR, $logo, $logo_x, $logo_y, 0, 0, $logoSize, $logoSize, imagesx($logo), imagesy($logo));

// Guardar el QR final
imagepng($QR, 'qr_final.png');

// Liberar memoria
imagedestroy($QR);
imagedestroy($logo);

echo "";
  • Primero generar el QR base con QR_ECLEVEL_H (alta corrección para soportar el logo).
  • Usar funciones GD (imagecreatefrompng, imagecopyresampled) para superponer el logo en el centro.
  • Asegúrate de que el logo no cubra más del 30% del QR para mantener la legibilidad.