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.
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:
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í:
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.
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.
El código de PHP que ocupé fue este:
Y así es como terminamos por hoy. Lee más sobre PHP aquí.
Amigo puedes dejar la descarga de la liberia ya instalada con el Composer . Gracias
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?
Hola. Según la documentación oficial (https://github.com/endroid/qr-code), entre más tamaño tenga el código, más calidad tendrá. Para cambiar el tamaño puede invocar a setSize
Saludos 🙂
parzibyte
Quisiera saber si has utilizado la libreria de phoword para la creacion de tablas en word
He utilizado PHPSpreadSheet (https://parzibyte.me/blog/2018/11/08/crear-archivo-excel-php-phpspreadsheet/) para trabajar con hojas de cálculo, pero con PHPWord todavía no, aunque en un futuro muy próximo voy a traer tutoriales sobre el mismo