Gerador de QR Codes em TypeScript: qrcode.js e qrcode-generator
\n\nOs QR Codes se tornaram uma parte essencial da web moderna: desde links para sites e senhas de Wi-Fi até dados de contato e informações de pagamento. No ecossistema TypeScript, existem várias bibliotecas maduras que permitem gerar QR Codes tanto no lado do cliente (navegador) quanto no servidor (Node.js). Neste artigo, analisaremos detalhadamente as duas mais populares: qrcode (qrcode.js) e qrcode-generator, além de mostrar como integrá-las em um projeto TypeScript.
\n\n1. qrcode (qrcode.js) — biblioteca universal
\n\nA biblioteca qrcode (pacote npm: qrcode) é o padrão de facto para geração de QR Codes. Ela suporta a saída do resultado em formato canvas, SVG, string Data URI ou texto simples. Graças à tipagem TypeScript (tipos integrados ou @types/qrcode), o desenvolvimento se torna seguro e conveniente.
Instalação
\nnpm install qrcode\nnpm install --save-dev @types/qrcode # para TypeScript\n\nExemplo básico: geração de QR Code em canvas (navegador)
\nimport QRCode from 'qrcode';\n\nconst canvas = document.getElementById('qr-canvas') as HTMLCanvasElement;\n\nQRCode.toCanvas(canvas, 'https://pythonlib.ru', { width: 300 }, (error) => {\n if (error) console.error('Erro de geração:', error);\n else console.log('QR Code criado!');\n});\n\nGeração em SVG (para renderização no servidor)
\nimport QRCode from 'qrcode';\n\nconst svgString = await QRCode.toString('https://pythonlib.ru', {\n type: 'svg',\n color: { dark: '#1a1a2e', light: '#eaeaea' }\n});\nconsole.log(svgString); // Código SVG pronto\n\nParâmetros de configuração
\n- \n
width— largura do QR Code em pixels (padrão 256). \n margin— margem da borda (em módulos, padrão 4). \n color.dark/color.light— cores dos módulos e do fundo. \n errorCorrectionLevel— nível de correção de erros:'L'(7%),'M'(15%),'Q'(25%),'H'(30%). \n type— formato de saída:'png','svg','utf8'. \n
2. qrcode-generator — alternativa leve
\n\nA biblioteca qrcode-generator (pacote npm: qrcode-generator) oferece uma API minimalista e não requer dependências. Ela é ideal se você precisa apenas obter uma matriz de QR Code ou gerá-lo em um formato personalizado.
Instalação
\nnpm install qrcode-generator\n\nExemplo: criação e renderização em canvas
\nimport QRCode from 'qrcode-generator';\n\nconst qr = QRCode(0, 'M'); // tipo (0 = auto) e nível de correção\nqr.addData('https://pythonlib.ru');\nqr.make();\n\nconst canvas = document.getElementById('qr-canvas') as HTMLCanvasElement;\nconst ctx = canvas.getContext('2d')!;\nconst size = qr.getModuleCount();\nconst cellSize = 10;\ncanvas.width = size * cellSize;\ncanvas.height = size * cellSize;\n\nfor (let row = 0; row < size; row++) {\n for (let col = 0; col < size; col++) {\n ctx.fillStyle = qr.isDark(row, col) ? '#000' : '#fff';\n ctx.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n}\n\nObtendo representação textual (para depuração)
\nconst qr = QRCode(0, 'M');\nqr.addData('Hello TypeScript!');\nqr.make();\nconsole.log(qr.createASCII()); // Exibe o QR Code no console com caracteres\n\n3. Comparação das bibliotecas
\n\n| Característica | \nqrcode (qrcode.js) | \nqrcode-generator | \n
|---|---|---|
| Suporte a TypeScript | \nSim (via @types/qrcode) | \nNão nativo, mas pode ser usado com declaração de tipos |