Códigos QR em meio-tom vs. códigos QR com dithering
As duas abordagens colocam uma imagem dentro de um código QR funcional. Não são a mesma técnica, e você consegue distingui-las do outro lado da sala: uma parece uma imagem atrás de uma tela de mosquiteiro, a outra parece grão fotográfico. Este artigo explica o que cada uma faz, por que parecem diferentes, onde uma vence claramente, e onde nenhuma das duas vence.
O método de meio-tom
O gerador clássico de QR em meio-tom, em circulação desde por volta de 2013, triplica o tamanho do código. Cada módulo vira um bloco 3×3 de subpixels. O subpixel central é fixado na cor exigida pelo módulo; os outros oito são livres para assumir o que a imagem (já binarizada por limiar) disser. Um leitor amostra os centros dos módulos, então os centros são o que precisa estar certo — e estão. Funciona, e produz um visual reconhecível: uma grade regular de pontos assentada sobre a imagem, porque a cada três pixels em ambas as direções um é fixado e esses pixels fixados se alinham perfeitamente. Seu olho é extremamente bom em encontrar uma treliça regular. Depois que você vê, não consegue mais deixar de ver. A abordagem é simples de implementar e fácil de raciocinar, e é por isso que tantos geradores a usam, e para um código que só será visto em uma tela no tamanho nativo ela é perfeitamente útil. Suas limitações aparecem na impressão, onde nada é visto no tamanho nativo e um único pixel fixado por módulo tem que sobreviver sozinho à impressora, ao papel, à iluminação e à reamostragem da câmera.
O método com dithering
A abordagem com dithering muda uma coisa e isso muda tudo. Em vez de binarizar a imagem primeiro e depois sobrescrever pixels, ela aplica o dithering à imagem com difusão de erro e trata um pixel forçado como parte desse processo: força o valor, mede o erro que a forçagem causou, e empurra esse erro para os pixels vizinhos do jeito que o Floyd–Steinberg empurra qualquer outro erro. O resultado é que os pixels forçados são compensados. Os pixels ao redor se deslocam para manter a média local correta, então os pontos forçados ficam dentro do mesmo pontilhado irregular que o resto da imagem. Não há treliça para o olho se prender, e a imagem é lida como uma imagem, e não como uma imagem atrás de uma tela de mosquiteiro. A região forçada também não precisa ser um único pixel: pode ser um bloco no centro de cada módulo cujo tamanho é uma configuração, que é o que o balanço Foto ↔ Código do SWAPQR controla. O resto do módulo — e a imagem nele — é o que a difusão de erro deixa, que por construção tem o tom médio certo para o módulo ao qual pertence.
Lado a lado
No método de meio-tom a imagem é binarizada antes de o código ser posicionado; no método com dithering as duas coisas acontecem juntas, em uma única passagem. O meio-tom força um subpixel por módulo, em uma grade perfeita; o dithering força um bloco central de tamanho ajustável, escondido no pontilhado. A assinatura visual do meio-tom é uma treliça regular de pontos sobre a imagem; a do dithering, grão fotográfico. O meio-tom oferece pouco ajuste — um dos nove pixels é fixo e pronto — enquanto o dithering oferece uma escolha contínua de quanto de cada módulo é forçado. E na robustez de perto, o meio-tom é fraco, porque um pixel por módulo não sobrevive a nenhuma reamostragem, enquanto o resultado com dithering é ajustável e, como mostra o artigo sobre close neste guia, mensurável: abaixo de cerca de metade do módulo forçado, leitores mais antigos com limiar por blocos têm dificuldade em close extremo; acima disso, não. Os dois métodos não são variações sobre um tema; eles respondem à pergunta "onde a imagem vai" em ordens diferentes, e essa ordem é o que o olho vê.
Onde o dithering vence de longe
Como a quantidade de forçagem é um botão em vez de um um-em-nove fixo, um gerador com dithering pode trocar imagem por confiabilidade de propósito. Isso não é uma diferença cosmética: com um pixel forçado por módulo, o código depende de um único pixel sobreviver a cada etapa de reamostragem entre a impressora e o sensor, e muitas vezes ele não sobrevive. Uma jato de tinta o espalha, uma impressora a laser o arredonda, uma plastificação o borra, uma câmera em ângulo o espalha por dois pixels do sensor, e a própria redução de escala do decodificador o mistura com os vizinhos. Forçar um bloco em vez disso — e deixar a difusão de erro pagar por ele — é o que faz a técnica se sustentar na impressão. Também significa que o mesmo gerador pode produzir um código quase simples para um adesivo em que as pessoas vão encostar o celular, e uma fotografia quase pura para um cartaz lido a um metro de distância, a partir da mesma imagem e do mesmo link, movendo um único controle. O meio-tom não tem controle assim: sua confiabilidade e seu visual são fixados pelo método, e a única forma de torná-lo mais robusto é abandoná-lo por uma região fixada maior, ponto em que ele virou o método com dithering com compensação pior.
Onde nenhum dos dois vence
Nenhuma das abordagens torna boa uma fotografia ruim, e nenhuma sobrevive a um conteúdo longo. Ambas precisam da correção de erro no nível mais alto, o que por si só torna o código mais denso. Uma imagem chapada e de baixo contraste falha nas duas, pelo mesmo motivo: produz uma textura uniforme que compete com os módulos. Um link longo falha nas duas, porque os módulos ficam pequenos demais para conter qualquer imagem. E ambas são, no fim, uma troca deliberada: você está gastando confiabilidade para comprar uma imagem. Gaste onde a imagem vale alguma coisa, e teste a impressão. Há uma terceira família que vale nomear: geradores que colocam uma imagem intocada atrás de um código normal e simplesmente clareiam os módulos, ou que recortam um logotipo no meio. Esses não estão codificando a imagem de forma alguma — estão contando com a correção de erro para absorver o dano. Perfeitamente válidos, muito menos interessantes, e muito mais limitados em quanta imagem você consegue, porque o custo inteiro é pago do orçamento de correção de erro sem nada compensando.
| Aspecto | Meio-tom (3×3) | Dithering (difusão de erro) |
|---|---|---|
| Quando a imagem é binarizada | Antes de posicionar o código | Junto com o código |
| Pixels forçados | Um por módulo, em uma grade perfeita | Um bloco central, escondido no pontilhado |
| Assinatura visual | Treliça regular de pontos sobre a imagem | Grão fotográfico |
| Ajuste disponível | Pouco — 1 de 9 pixels é fixo | Contínuo — escolha quanto de cada módulo é forçado |
| Robustez de perto | Fraca — um pixel por módulo não sobrevive a nenhuma reamostragem | Ajustável, e mensurável |
Perguntas frequentes
Qual dos dois o SWAPQR usa?
O método com dithering. A imagem é reduzida com a difusão de erro Floyd–Steinberg, os pixels de que o código precisa são forçados e o erro deles é difundido para os vizinhos, e o tamanho do bloco forçado é o balanço Foto ↔ Código.
Por que um código em meio-tom parece ter uma grade por cima?
Porque exatamente um subpixel em cada bloco 3×3 é fixado e esses pixels fixados se alinham perfeitamente em ambas as direções. O olho encontra uma treliça regular imediatamente.
Um logotipo recortado no meio é a mesma coisa?
Não. Isso conta com a correção de erro para absorver uma região danificada; nada compensa o dano. É válido, mas permite muito menos imagem do que tanto o método de meio-tom quanto o com dithering.
Os dois precisam da correção de erro mais alta?
Sim. Ambos gastam parte do orçamento de recuperação do código na imagem, então ambos são gerados no nível mais alto, o que torna o código mais denso e é mais um motivo para manter o link curto.
Imprima o quadrado uma vez. Decida depois para onde ele leva. O SWAPQR cria códigos QR estáticos de graça, com todas as opções de estilo, sem conta e sem marca d'água. Um plano pago torna um código dinâmico: o quadrado impresso continua o mesmo enquanto você muda o destino dele, e você vê quantas vezes ele foi escaneado, por dia e por dispositivo.
Criar um código QR no navegador