Generador de códigos QR en Rust: biblioteca qr_code

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generador de códigos QR en Rust: biblioteca qr_code



Los códigos QR se han convertido en una parte esencial de la web moderna y las aplicaciones móviles. Se utilizan para intercambiar rápidamente enlaces, contactos, datos de pago y otra información. Si desarrollas en Rust y deseas agregar generación de códigos QR a tu proyecto, la biblioteca qr_code es una de las mejores soluciones. En este artículo, analizaremos en detalle cómo instalar, configurar y usar esta biblioteca para crear códigos QR directamente en código Rust.



¿Qué es la biblioteca qr_code?

qr_code es una biblioteca pura de Rust para generar códigos QR (versión 2) sin dependencias externas. Permite crear códigos QR a partir de datos de cadena, configurar el nivel de corrección de errores, el tamaño del módulo y el color. La biblioteca admite salida en formato SVG, PNG (a través de image) y como gráficos ASCII para la terminal. Las principales ventajas son:

  • Alto rendimiento (Rust sin GC).
  • Consumo mínimo de memoria.
  • Soporte para los cuatro niveles de corrección de errores (L, M, Q, H).
  • Configuración flexible de la apariencia del código QR.


Instalación

Agrega la dependencia a tu Cargo.toml:

[dependencies]qr_code = "0.2.0"

Si necesitas salida en PNG, instala adicionalmente el crate image:

image = "0.24"

Después de esto, ejecuta cargo build para descargar y compilar la biblioteca.



Ejemplo básico: generación de código QR en SVG

La forma más sencilla de obtener un código QR es guardarlo en formato vectorial SVG. A continuación se muestra un ejemplo mínimo funcional:

use qr_code::QrCode;

fn main() { // Creamos un código QR a partir de una cadena let code = QrCode::new("https://pythonlib.ru").unwrap(); // Generamos la cadena SVG con un tamaño de módulo de 8 píxeles let svg = code.to_svg().with_width(8).to_string(); // Guardamos en un archivo std::fs::write("qrcode.svg", svg).unwrap(); println!("Código QR guardado en qrcode.svg");}

Después de ejecutar, obtendrás un archivo qrcode.svg que puedes abrir en un navegador o insertar en una página HTML.



Configuración del nivel de corrección de errores

El nivel de corrección determina cuánto puede dañarse un código QR y seguir siendo legible. La biblioteca admite cuatro niveles:

  • ErrorCorrection::Low — se puede recuperar el 7% de los datos.
  • ErrorCorrection::Medium — 15%.
  • ErrorCorrection::Quartile — 25%.
  • ErrorCorrection::High — 30%.

Ejemplo de uso:

use qr_code::{QrCode, ErrorCorrection};

let code = QrCode::with_error_correction( "Código secreto", ErrorCorrection::High).unwrap();

let svg = code.to_svg().with_width(10).to_string();std::fs::write("secret_qr.svg", svg).unwrap();


Generación de código QR en PNG (imagen rasterizada)

Para la salida en PNG, necesitarás el crate image. Primero, agrégalo a tu Cargo.toml, luego usa el siguiente código:

use qr_code::QrCode;use image::{Luma, ImageBuffer};

fn main() { let code = QrCode::new("¡Rust es increíble!").unwrap(); // Creamos la imagen: cada módulo = 10 píxeles let size = code.width() * 10; let mut img = ImageBuffer::new(size as u32, size as u32); // Rellenamos con fondo blanco for pixel in img.pixels_mut() { *pixel = Luma([255u8]); } // Dibujamos los módulos negros for y in 0..code.width() { for x in 0..code.width() { if code[(x, y)] { let px = x as u32 * 10; let py = y as u32 * 10; for dy in 0..10 { for dx in 0..10 { img.

Recommendations