Los códigos QR (Quick Response Code) son códigos bidimensionales que pueden almacenar pequeñas cantidades de información, por ejemplo, una URL, y ser leídos fácilmente con lectores especializados o con casi cualquier dispositivo que cuente con una cámara de fotos.
Aunque hay su uso cotidiano sea discutible, es innegable que es muy frecuente verlos por todas partes y, antes o después, es probable que te toque generar uno. Existen muchos generadores online de códigos QR, pero si queremos generarlos dinámicamente desde una aplicación C#, es posible hacerlo fácilmente gracias a varias librerías.
QrCode.NET
Después de echar un vistazo a las librerías existentes, me ha gustado bastante la librería QrCode.Net, que es fácil de utilizar, soporta casi todas las versiones de .NET, y además tiene una licencia MIT que nos permite emplearla en aplicaciones comerciales.
A día de hoy, la última versión “estable” es la 0.4 Pre-release, lo que da un poco de miedo, pero la verdad es que ha cubierto mis expectativas y se ha comportado sin problemas.
Para incluirla en el proyecto, puedes descargarla desde su web o instalarla como un paquete NuGet:
PM> Install-Package QrCode.Net
Para generar un código QR no hace falta mucho esfuerzo:
var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); var qrCode = qrEncoder.Encode("https://blog.koalite.com"); var renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White); using (var stream = new FileStream("qrcode.png", FileMode.Create)) renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);
La idea es que crear un objeto QrEncoder
que será el encargado de generar el código QR. Este código QR se almacena en un objeto QrCode
, a partir del cual podemos generar una imagen usando distintos tipos de renderers, en el caso del ejemplo, un GraphicsRenderer
que usa las clases de Sytem.Drawing
.
Existen otros renderers optimizados para distintos escenarios, como generar el código directamente sobre control de Windows Forms o de WPF, o exportarlo como un fichero SVG. En todos los casos el funcionamiento es muy similar al mostrado.
Resumen
A veces parece que el mundo open source en .NET no existe, pero lo cierto es que, aunque no sea tan «vibrante» como el de otras comunidades, es fácil encontrar librerías para solucionar multitud de problemas. Otra cosa es que en algunos entornos haya reticencia a usarlas, pero las herramientas están ahí.
Con QrCode.Net es muy sencillo generar dinámicamente códigos QR desde cualquier aplicación en C#. Puede que luego nadie lea el código QR, pero hay que reconocer que le da un toque muy «actual» a tu aplicación y a veces puede ser hasta práctico.
Hola, antes que nada gracias por tu blog, me ha sido muy útil. Estoy usando esta librería pero no se como cambiar la versión del QrCode. Que otra librería puedo (por la licencia)
saludos
Hola,
La verdad es que no sé muy bien qué es la versión del QrCode. No tengo un PC a mano, pero en los fuentes de QrCode.Net hay una clase QRCodeVersion que seguramente tenga algo que ver, aunque no sé como se usará.
Supongo que bajando los fuentes y echando un vistazo podrás ver dónde y cómo se usa.
Un saludo,
Juanma.
Hey, good post, fast, simple and easy; it’s exactly what I was looking for.
Regards
Muchas gracias! Todo muy claro y fácil
Saludos
Sólo me queda una duda en la linea
FixedModuleSize(5, QuietZoneModules.Two)
QuietZoneModules.two son dos zonas sin imagen a los lados (creo…) y 5 es el tamaño del Código QR pero ¿En que unidades?, lo necesito para saber de que tamaño quedaría la imagen, lo he aproximado con la formula :
tamaño.Height / cod.Matrix.Height;
donde tamaño.Height es el tamaño de imagen que requiero y cod es el QrCode generado, pero no es exacto.
¡Saludos y buen post!
Que librerias usa aparte de drawing, pues me lanza un herror en qrencoder
Ninguna. ¿Qué error te lanza el qrencoder?
Disculpa, al final como puedo guardar este renderizado como imagen en la unidad C de mi PC?