Como Gerar e Incorporar Códigos QR
Você precisa adicionar um código QR à sua aplicação web. Talvez seja para um fluxo de pagamento, um link compartilhável ou ingressos de eventos. A questão não é se deve usar um código QR—é como gerar um de forma confiável no navegador sem introduzir problemas de leitura ou questões de segurança.
Este artigo aborda a geração de códigos QR no lado do cliente em JavaScript, explica quando usar saída SVG versus Canvas, e aborda as restrições práticas que afetam a confiabilidade da leitura.
Principais Conclusões
- Gere códigos QR em JavaScript usando bibliotecas estabelecidas—não construa a lógica de codificação do zero
- Escolha SVG para incorporação web escalável, Canvas para manipulação programática de imagens
- Respeite as zonas de silêncio, mantenha o contraste e teste com dispositivos de leitura reais
- Forneça alternativas visíveis para acessibilidade e segurança
Entendendo Geração vs. Leitura de Códigos QR
Antes de escrever qualquer código, distinga entre dois problemas separados: geração e leitura.
A geração acontece inteiramente sob seu controle. Você codifica dados em uma imagem de código QR usando bibliotecas JavaScript. Isso funciona de forma confiável em todos os navegadores modernos.
A leitura é diferente. APIs nativas do navegador para ler códigos QR (como a Barcode Detection API) permanecem experimentais e carecem de suporte universal. Se sua aplicação precisa de leitura, planeje alternativas—tipicamente uma biblioteca JavaScript baseada em câmera ou campos de entrada manual.
Este artigo foca na geração. Não confunda os dois ao planejar sua implementação.
Como Gerar Códigos QR em JavaScript
Várias bibliotecas JavaScript lidam com a geração de códigos QR para trabalho frontend. Opções comuns incluem qrcode, que suporta geração tanto no cliente quanto no servidor, qrcode-generator, um codificador JavaScript puro e leve, e o mais antigo mas ainda amplamente usado QRCode.js para saída simples em Canvas ou DOM. Nenhuma dessas é “o padrão”—cada uma tem trade-offs em tamanho de bundle, formatos de saída e opções de customização.
O padrão geral se parece com isto:
- Importe a biblioteca escolhida
- Passe os dados que deseja codificar (URL, texto, dados vCard)
- Especifique o formato de saída e dimensões
- Renderize para um elemento DOM ou extraia como data URL
A maioria das bibliotecas aceita configuração para níveis de correção de erros (L, M, Q, H). Níveis mais altos permitem que mais do código seja danificado enquanto permanece legível—útil se você planeja sobrepor logos ou imprimir em superfícies texturizadas.
Códigos QR: SVG vs Canvas
Quando você incorpora códigos QR na web, normalmente escolherá entre três formatos de saída: SVG, Canvas ou PNG/data URLs.
Saída SVG
SVG geralmente é a melhor escolha para incorporação web. O formato vetorial escala infinitamente sem pixelização, tornando-o ideal para layouts responsivos e aplicações de impressão. Os tamanhos de arquivo permanecem pequenos independentemente das dimensões de exibição. A estilização CSS funciona naturalmente.
Use SVG quando:
- O código QR aparecer em tamanhos variados
- A qualidade de impressão importar
- Você precisar de estilização ou animação baseada em CSS
Saída Canvas
Canvas renderiza para um bitmap em uma resolução específica. Isso funciona bem quando você precisa de controle em nível de pixel ou planeja compor o código QR com outros gráficos programaticamente.
Use Canvas quando:
- Você estiver gerando imagens para download
- Precisar manipular pixels diretamente
- Estiver integrando com outros gráficos baseados em Canvas
PNG/Data URLs
Data URLs permitem incorporar o código QR como uma string de imagem codificada em base64. Isso elimina requisições HTTP adicionais, mas aumenta o tamanho do payload HTML. Útil para templates de e-mail ou contextos onde recursos externos não são confiáveis.
Discover how at OpenReplay.com.
Restrições Práticas Que Afetam a Confiabilidade da Leitura
Um código QR que parece correto ainda pode falhar na leitura. Fique atento a esses problemas:
Zonas de silêncio: Códigos QR requerem espaço vazio ao redor de suas bordas—tipicamente quatro módulos de largura. Cortar essa margem quebra a leitura.
Contraste: A especificação assume módulos escuros em um fundo claro. Cores invertidas ou combinações de baixo contraste reduzem a confiabilidade. Busque pelo menos uma proporção de contraste de 4:1.
Dimensionamento: O tamanho mínimo legível depende da distância de visualização e qualidade da câmera. Para exibição em tela, tamanhos menores podem funcionar em dispositivos modernos, mas os resultados dependem da distância de visualização e qualidade da câmera. Para impressão, calcule com base na distância de leitura esperada.
Sobreposições de logo e estilização pesada: Adicionar logos ao centro explora a correção de erros—o leitor trata o logo como dano e reconstrói os dados. Isso só funciona com níveis mais altos de correção de erros (Q ou H), e estilização agressiva pode ultrapassar os limites recuperáveis. Teste minuciosamente.
Considerações de Segurança e UX
Códigos QR que codificam URLs criam oportunidades de phishing. Os usuários não podem inspecionar o destino antes de escanear. Se sua aplicação gera códigos QR a partir de entrada do usuário, valide e sanitize essa entrada. Considere exibir a URL codificada como texto visível ao lado do código.
Para acessibilidade, sempre forneça a informação codificada em um formato alternativo. Um link visível ao lado do código QR atende usuários que não podem ou não querem escanear.
Geração no Lado do Servidor
Embora este artigo foque em abordagens do lado do cliente, a geração no lado do servidor tem usos legítimos: reduzir o tamanho do bundle do cliente, fazer cache de códigos gerados ou gerar códigos em ambientes sem JavaScript. Existem bibliotecas para Node.js, Python, Go e a maioria das outras linguagens backend. As considerações de formato de saída permanecem as mesmas.
Conclusão
A implementação técnica da geração de códigos QR é direta. Use bibliotecas JavaScript estabelecidas em vez de construir a lógica de codificação do zero. Escolha SVG para incorporação web escalável e Canvas para manipulação programática de imagens. A confiabilidade dos seus códigos QR vem de respeitar as restrições: mantenha as zonas de silêncio, garanta contraste adequado e teste com dispositivos de leitura reais. Sempre forneça alternativas visíveis tanto para fins de acessibilidade quanto de segurança.
Perguntas Frequentes
Os níveis de correção de erros determinam quanto dano um código QR pode sofrer enquanto permanece legível. L recupera cerca de 7% de dano, M recupera 15%, Q recupera 25% e H recupera 30%. Use níveis mais altos (Q ou H) ao adicionar sobreposições de logo ou imprimir em superfícies texturizadas, pois o leitor trata essas modificações como dano e reconstrói os dados faltantes.
Causas comuns incluem zonas de silêncio cortadas (a borda vazia ao redor do código), contraste insuficiente entre módulos escuros e claros, ou dimensionamento muito pequeno para a distância de leitura. Garanta pelo menos quatro módulos de espaço vazio ao redor da borda, mantenha uma proporção de contraste mínima de 4:1 e teste na distância de visualização real com dispositivos reais.
A geração no lado do cliente funciona bem para a maioria das aplicações web e reduz a carga do servidor. A geração no lado do servidor faz sentido quando você precisa reduzir o tamanho do bundle do cliente, fazer cache de códigos gerados para reutilização ou gerar códigos em ambientes sem JavaScript. Ambas as abordagens produzem saída idêntica—escolha com base nas necessidades da sua arquitetura.
Sim, mas apenas com níveis mais altos de correção de erros (Q ou H). O leitor trata o logo como dano e usa a correção de erros para reconstruir os dados. Mantenha logos pequenos, centralizados e teste minuciosamente com múltiplos aplicativos de leitura. Estilização agressiva ou logos muito grandes podem exceder os limites recuperáveis e quebrar completamente a leitura.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.