Gerador de QR Codes em Rust: biblioteca qr_code
Os QR codes se tornaram parte essencial da web moderna e dos aplicativos móveis. Eles são usados para compartilhar rapidamente links, contatos, dados de pagamento e outras informações. Se você desenvolve em Rust e deseja adicionar geração de QR codes ao seu projeto, a biblioteca qr_code é uma das melhores soluções. Neste artigo, vamos detalhar como instalar, configurar e usar esta biblioteca para criar QR codes diretamente no código Rust.
O que é a biblioteca qr_code?
qr_code é uma biblioteca Rust pura para geração de QR codes (versão 2) sem dependências externas. Ela permite criar QR codes a partir de dados de string, configurar o nível de correção de erros, o tamanho do módulo e a cor. A biblioteca suporta saída nos formatos SVG, PNG (através de image) e como gráficos ASCII para terminal. Principais vantagens:
- Alta performance (Rust sem GC).
- Consumo mínimo de memória.
- Suporte a todos os quatro níveis de correção de erros (L, M, Q, H).
- Configuração flexível da aparência do QR code.
Instalação
Adicione a dependência ao seu Cargo.toml:
[dependencies]qr_code = "0.2.0"Se precisar de saída em PNG, instale também o crate image:
image = "0.24"Depois disso, execute cargo build para baixar e compilar a biblioteca.
Exemplo básico: geração de QR code em SVG
A maneira mais simples de obter um QR code é salvá-lo no formato vetorial SVG. Abaixo está um exemplo funcional mínimo:
use qr_code::QrCode;
fn main() { // Cria um QR code a partir de uma string let code = QrCode::new("https://pythonlib.ru").unwrap(); // Gera a string SVG com tamanho de módulo de 8 pixels let svg = code.to_svg().with_width(8).to_string(); // Salva em arquivo std::fs::write("qrcode.svg", svg).unwrap(); println!("QR code salvo em qrcode.svg");}Após a execução, você obterá o arquivo qrcode.svg, que pode ser aberto no navegador ou inserido em uma página HTML.
Configuração do nível de correção de erros
O nível de correção determina o quanto o QR code pode ser danificado e ainda permanecer legível. A biblioteca suporta quatro níveis:
ErrorCorrection::Low— 7% dos dados podem ser recuperados.ErrorCorrection::Medium— 15%.ErrorCorrection::Quartile— 25%.ErrorCorrection::High— 30%.
Exemplo 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();Geração de QR code em PNG (imagem raster)
Para saída em PNG, será necessário o crate image. Primeiro, adicione-o ao Cargo.toml, depois use o seguinte código:
use qr_code::QrCode;use image::{Luma, ImageBuffer};
fn main() { let code = QrCode::new("Rust é incrível!").unwrap(); // Cria a imagem: cada módulo = 10 pixels let size = code.width() * 10; let mut img = ImageBuffer::new(size as u32, size as u32); // Preenche com fundo branco for pixel in img.pixels_mut() { *pixel = Luma([255u8]); } // Desenha os módulos pretos 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. Também na biblioteca
Biblioteca WebSocket Kotlin: ktor-client-websockets para tempo real
Envio de SMS em Go (Golang): integração com API de biblioteca
Configuração de aplicações Kotlin: Biblioteca Hoplite