17 años en Internet

09 enero 2014

qrencoder + zbar: Generación y lectura de códigos QR en Linux

Los famosos códigos QR, que a día de hoy vemos en todas partes, fueron inventados en 1994 por Denso Wave (del grupo Toyota) y su nombre es el acrónimo de Quick Response. El motivo del nombre se debe a la necesidad imperiosa de mostrar una gran cantidad de información en un código de barras y que éste tenga una lectura casi inmediata. De hecho, un código QR alfanumérico puede contener nada menos que 4296 caracteres. Esta versatilidad le ha llevado a ser ahora mismo el código de barras más famoso de Japón, hasta el punto de que su gobierno lo emplea incluso a la hora de emitir sus visados.

Gran parte de este éxito se debe a que, a pesar de provenir de un laboratorio de empresa privada, los códigos QR están libres de toda licencia y además cuentan con su propio estándar ISO. Realmente esto es una mentira a medias, puesto que Denso Wave tiene la patente del código QR pero ha decidido no hacer uso de sus derechos de autor. Digamos que, por un lado, la renuncia de sus derechos de autor permite que todo el mundo pueda explotarlo como le parezca, mientras que por otro lado la existencia de un estándar ISO garantiza la existencia de una serie de reglas que todo el mundo debe de cumplir.

Esta flexibilidad, el de tener una serie de normas bien definidas y una licencia de libre uso, permite la profelización de aplicaciones para todo sistema operativo, siendo sobre todo notable en el gran ecosistema actual de smartphones. No obstante, al igual que en los teléfonos inteligentes también existen herramientas de creación y de descifrado de imágenes QR en los sistemas operativos de ordenador, siendo qrencoder y zbar los referentes más famosos de Linux. Ambos suelen estar presentes en los repositorios de toda distribución actual, pudiéndose instalar fácilmente a través de apt-get, yum o yast2.

El uso de qrencoder es bien sencillo:
qrencoder -o imagen.png 'texto a añadir'
Por ejemplo, escribiendo "qrencoder -o imagen.png 'http://www.elgeneralfailure.com'" crearíamos el siguiente código QR:
Al igual que en toda aplicación Unix, podemos jugar con las tuberías o redirigir la entrada estándar para elaborar toda clase de scripts de bash:
echo "http://www.elgeneralfailure.com" | qrencode -o imagen.png
echo "http://www.elgeneralfailure.com" > /tmp/texto.txt
qrencode -o imagen.png < /tmp/texto.txt
echo "http://www.elgeneralfailure.com" > /tmp/texto.txt
cat /tmp/texto.txt | qrencode -o imagen.png
El segundo y tercer ejemplo son bastante útiles si queremos hacer textos complejos con retornos de carro inclusive. No obstante, si desconocemos las bondades de las que permite hacer uso los códigos QT, resultaría útil darle un vistazo a la aplicación QtQR, una aplicación gráfica escrita en Qt que simplifica labores como automatizar el envío de un e-mail o crear una entrada de agenda de contactos:


Para leerlos no hace falta mostrar estos códigos por webcam, también existen aplicaciones que permiten la decodificación de QR a través de imágenes PNG.  El más práctico que he probado es zbarimg (se instala a través del paquete zbar-tools) y requiere cómo único parámetro la imagen a analizar. Ahora bien, habría que aclarar que se trata de una utilidad que permite analizar toda clase de códigos de barra, no sólo los QR.

Ejemplo de uso:
sebas@MacBookPro:~$ zbarimg imagen.png
QR-Code:http://www.elgeneralfailure.com
scanned 1 barcode symbols from 1 images in 0.04 seconds
Por desgracia, a diferencia de qrencode para la entrada de datos no se nos permite jugar a placer con redirecciones ni con tuberías. No obstante, si tenemos instalado el paquete imagemagick, con la instrucción "import :- | zbarimg :-" podemos capturar una región de pantalla para analizar el código QR que contenga (1).

No hay comentarios:

Publicar un comentario

Si te ha gustado la entrada o consideras que algún dato es erróneo o símplemente deseas dar algún consejo, no dudes en dejar un comentario. Todo feedback es bienvenido siempre que sea respetuoso. También puedes contactarme vía Twitter @Hamster_ruso si lo consideras necesario.