O que o leitor realmente lê é o contraste — projete pensando nisso e a maioria das paletas de marca sobrevive.
Um leitor não vê vermelho nem azul. Ele reduz a imagem a tons de cinza e procura uma diferença entre claro e escuro entre os módulos e o fundo. Qualquer par de cores funciona se a diferença de luminância for grande o bastante, e qualquer par falha se não for — inclusive pares que parecem gritantemente diferentes aos seus olhos.
A medida útil é a razão de contraste, a mesma usada em acessibilidade na web. Preto sobre branco é 21:1. Para impressão, busque 7:1 ou melhor e trate qualquer coisa abaixo de 4:1 como um código que vai falhar em algum lugar: uma sala mal iluminada, uma câmera barata, uma etiqueta gasta, um celular inclinado.
Duas cores podem ter matizes completamente diferentes e brilho quase idêntico. O matiz é o que você vê; o brilho é o que o leitor vê.
Módulos escuros sobre fundo claro é o que todo decodificador espera. É o que a especificação descreve e é o que leitores de hardware, celulares antigos e leitores dentro de aplicativos presumem antes de tentar qualquer coisa mais esperta.
Códigos invertidos — módulos claros sobre fundo escuro — funcionam em muitos celulares modernos. A câmera do iOS e o Google Lens costumam dar conta. Mas muitos leitores dentro de aplicativos, aparelhos Android mais antigos e quase todo leitor a laser ou de imagem dedicado não invertem, então um código invertido faz você perder uma fatia do público em silêncio, sem mensagem de erro e sem nenhuma forma de saber.
Se o design realmente precisa de uma superfície escura, não inverta. Imprima uma base clara atrás do código — um painel branco ou creme com toda a zona de silêncio dentro dele — e mantenha os módulos escuros. Fica com cara de escolha proposital e escaneia em qualquer lugar.
As razões de contraste abaixo são aproximadas e calculadas pelo método da WCAG, cor do código contra cor de fundo. Tudo o que está na faixa segura ainda tem margem para luz ruim e câmeras baratas.
| Código sobre fundo | Contraste aprox. | Veredito |
|---|---|---|
| Preto sobre branco | 21:1 | Seguro — a referência |
| Quase preto #111827 sobre branco | 17:1 | Seguro, e mais suave que o preto puro |
| Azul-marinho #0B1F3B sobre branco | 16:1 | Seguro |
| Verde-escuro #14532D sobre branco | 9:1 | Seguro |
| Código escuro sobre creme claro #FAF5EC | 15:1+ | Seguro — fundos quentes funcionam bem |
| Verde-azulado #0F766E sobre branco | 5.5:1 | No limite — dá para usar impresso, teste antes |
| Cinza médio #808080 sobre branco | 4:1 | Arriscado — falha com pouca luz |
| Laranja #F97316 sobre branco | 2.8:1 | Falha |
| Vermelho-escuro #8B0000 sobre preto | 2.1:1 | Falha |
| Azul pastel #A7D8F0 sobre branco | 1.5:1 | Falha |
| Amarelo #FFD700 sobre branco | 1.4:1 | Falha feio |
| Branco sobre quase preto #111827 | 17:1 | Alto contraste, mas invertido — evite impresso |
O vermelho carrega muito pouca luminância para o quanto ele parece berrante. Vermelho puro sobre preto mede cerca de 5:1 no papel, mas desaba na prática, porque o canal vermelho da câmera é o mais ruidoso e a iluminação interna quente desloca o balanço de branco ainda mais contra ele. Vermelho-escuro sobre preto fica perto de 2:1 e simplesmente não decodifica.
A mesma armadilha pega o amarelo e o laranja pelo outro lado. Eles parecem claros ao olho, então os designers os combinam com branco, onde a diferença de luminância é quase nula. Amarelo sobre branco fica em torno de 1.4:1 — um código que você enxerga com clareza e que o leitor não consegue ler de jeito nenhum.
Os três quadrados grandes nos cantos são os marcadores de posição, e um quadrado de alinhamento menor fica perto do canto inferior direito em todos os códigos, exceto nos menores. O leitor os usa para localizar o código, descobrir sua orientação e corrigir o ângulo antes de ler um único módulo de dados.
Eles precisam continuar sendo a parte mais escura e de maior contraste da imagem. Tingi-los com uma cor de destaque mais clara, preenchê-los com um gradiente, contorná-los com um traço fino ou deixar um logo ou uma foto se sobrepor a eles são maneiras infalíveis de construir um código que fica lindo e escaneia de vez em quando.
Mudar o formato deles é outra história e não tem problema. Marcadores de posição arredondados ou circulares mantêm a mesma relação entre claro e escuro e só mudam o contorno — é por isso que existem opções de estilo. O que se deve evitar é mexer no contraste deles.
Um gradiente aplicado aos módulos só é seguro se cada parada dele superar o seu piso de contraste em relação ao fundo. Um gradiente que vai do azul-marinho profundo ao azul-céu claro vai escanear em uma ponta do código e falhar na outra — o que é pior do que falhar de vez, porque passa no seu primeiro teste.
A maioria das paletas tem alguma cor escura o suficiente para funcionar. Pegue a cor mais escura da marca, teste-a contra o branco e, se ela passar de 7:1, você pode montar o código inteiro com ela e continuar fiel à marca.
Se a cor da marca for clara ou de tom médio, use-a em outro lugar que não os módulos: como cor de fundo atrás de um código quase preto, como moldura ou painel ao redor dele, como o texto de chamada embaixo ou como o logo no centro. O código em si continua escuro e tudo ao redor carrega a marca.
Um logo no centro traz sua própria restrição. Mantenha-o abaixo de mais ou menos 20 a 25 por cento da área do código e aumente a correção de erros para Q (cerca de 25 por cento de recuperação) ou H (cerca de 30 por cento), para que os módulos cobertos possam ser reconstruídos.
Três verificações pegam quase tudo, e todas elas levam menos tempo do que uma reimpressão.
As cores mudam entre a tela e a impressão. Um azul-marinho em RGB que mede 16:1 no seu monitor pode sair visivelmente mais claro em CMYK sobre papel não revestido, então a prova em papel é a verificação que conta.
Grátis, sem cadastro, e seu código nunca expira.
Conseguiu seu código? ☕ Me pague um café — é o que mantém esta ferramenta gratuita para todo mundo.