Un codice QR si decodifica a 1,2:1. Non progettare neanche vicino
dal team KoloQRRicerca

Né Apple né Google pubblicano una soglia di contrasto per le app fotocamera che leggono la maggior parte dei codici QR, quindi ogni numero citato come limite di iPhone o di Android è citato da una misurazione che nessuno ha pubblicato. Quello che si può leggere è il codice sorgente di ZXing, il decodificatore open source dietro buona parte di tutto il resto: lavora a blocchi di 8 x 8 pixel e considera privo di qualsiasi bordo un blocco i cui pixel più chiaro e più scuro distano fra loro 24 livelli su 255. È un rapporto di contrasto di circa 1,24:1 - un grigio appena visibile sul bianco. Non è il decodificatore il vincolo. Il vincolo è la carta che riflette l'85% invece del 100%, l'inchiostro che si allarga, il riflesso che alza i neri e mezzo millimetro di mosso, ed è per questo che i numeri operativi sono 4:1 su uno schermo e 7:1 in stampa.
Punti chiave
- Né Apple né Google pubblicano una soglia di contrasto per la scansione dei codici QR integrata in iOS e Android, quindi un singolo numero citato come "il" limite di iPhone o di Android non è una misurazione che qualcuno possa verificare. Quello che si può verificare è il codice sorgente pubblicato di ZXing, il decodificatore open source, e la norma di qualità di stampa ISO/IEC 15415.
- Il binarizzatore ibrido di ZXing lavora su blocchi di 8 x 8 pixel e considera privo di bordi un blocco i cui pixel più chiaro e più scuro distano fra loro 24 livelli su 255. Sul bianco, 24 livelli sono il grigio #E7E7E7 - un rapporto di contrasto di circa 1,24:1.
- Progetta a 4:1 per uno schermo e a 7:1 per la stampa, e tratta 3:1 come la soglia sotto la quale un codice non deve andare in produzione. Lo scarto fra 1,24:1 e 7:1 non è superstizione: sono la carta, la luce ambientale, i riflessi e il mosso che si sottraggono al valore di progetto prima che il decodificatore veda alcunché.
- Un rapporto di contrasto non è ciò che misura una fotocamera. Il rapporto pesa il verde al 71% della luminosità percepita e aggiunge un termine di riflesso; il canale di luminanza di una fotocamera pesa il verde al 59% e non aggiunge nulla. I due divergono soprattutto sul rosso, sul verde e sul blu saturi, e il rapporto è il più severo dei due.
- Il mosso e il contrasto basso si moltiplicano invece di sommarsi, perché il mosso media i pixel vicini e quindi riduce l'escursione fra il più chiaro e il più scuro dentro ogni blocco - esattamente la quantità su cui il binarizzatore fissa la soglia. Un codice che sopravvive a 3:1 in una fotografia ferma fallisce a 3:1 in una mano che si muove.
Nessuno pubblica il numero, ed è questo il punto di partenza
Non esiste alcuna soglia di contrasto pubblicata per la scansione dei codici QR integrata nelle fotocamere di iPhone e Android. Il rilevamento dei codici a barre di Apple sta dentro il framework Vision e quello di Android dentro Google Play Services, entrambi chiusi, entrambi non documentati su questo punto, e nessuno dei due ha mai dichiarato un minimo. Qualsiasi articolo che ne nomini una - 3:1, 4:1, 40% - o sta citando una linea guida di design scritta per altro, o non sta citando niente.
Vale la pena dirlo apertamente invece di girarci attorno, perché la forma della risposta onesta discende da qui. Tre cose si possono stabilire senza avere un laboratorio: che cosa fa un decodificatore open source, perché il suo codice sorgente è pubblicato; che cosa misura la norma di qualità di stampa, perché è una norma pubblicata; e che cosa fa un dato codice su un dato smartphone, perché servono venti minuti e una stampante. Tutto il resto su questo argomento è l'impressione di qualcuno.
La domanda continua a tornare perché il contrasto è l'unica variabile di un codice QR che un designer controlla senza volerlo. La dimensione del modulo è una decisione deliberata. La correzione degli errori è una decisione deliberata. Il colore viene scelto per una palette di marca tre anni prima che qualcuno pensi a un codice QR, e il codice se lo eredita. Quindi la domanda pratica non è "qual è il minimo" ma "quanto margine mi lascia questa palette", e questa una risposta ce l'ha.
Quello che un decodificatore misura davvero è una differenza locale
Un decodificatore non confronta mai il tuo colore di primo piano con il tuo colore di sfondo. Converte il fotogramma della fotocamera in un unico canale di grigi, decide per ogni piccolo intorno di pixel dove cade il confine fra scuro e chiaro in quell'intorno, e legge i moduli dal risultato. La binarizzazione è il passaggio in cui un decodificatore trasforma una fotografia in scala di grigi in pixel di puro bianco e nero prima di provare a leggere qualsiasi modulo. Tutto ciò che riguarda la tolleranza al contrasto si decide lì.
ZXing è il decodificatore che vale la pena leggere, perché è l'unico ampiamente diffuso il cui codice sorgente è pubblico. Il suo binarizzatore ibrido predefinito divide l'immagine in blocchi di 8 x 8 pixel, calcola il pixel più chiaro e quello più scuro di ciascun blocco e fissa la soglia di quel blocco a metà strada fra i due. Sotto una dimensione dell'immagine di 40 pixel abbandona l'approccio locale e applica un'unica soglia a tutta l'immagine.
La costante interessante è la guardia su quel ciclo sui blocchi. Se la differenza fra il pixel più chiaro e quello più scuro di un blocco è 24 o meno, su 255, ZXing non ne ricava una soglia: assume che il blocco contenga solo pixel chiari o solo pixel scuri e prende in prestito una stima dai vicini. Ventiquattro livelli sotto il bianco sono il grigio #E7E7E7, che è un rapporto di contrasto di circa 1,24:1. In un'immagine digitale pulita e con moduli di dimensione generosa, quello è il limite minimo.
Ne seguono due conseguenze, entrambe più utili del numero in sé. La prima è che il contrasto si misura localmente, all'incirca sull'area di pochi moduli, e non sull'intera pagina - ed è per questo che una sfumatura lenta dietro un codice è molto meno pericolosa di quanto sembri, e che una fotografia dietro un codice è fatale. Una sfumatura mantiene intatta la differenza locale ovunque; una fotografia, a metà del simbolo, ribalta da che parte del confine finisce un modulo.
La seconda è che contrasto e dimensione sono lo stesso problema con un altro vestito. I blocchi sono di otto per otto pixel della fotocamera, non di otto per otto moduli, quindi quanti moduli cadano dentro un blocco dipende interamente da quanto grande arriva il simbolo sul sensore. Un codice che riempie l'inquadratura ottiene diversi blocchi per modulo e una soglia calcolata dai bordi di quel modulo. Un codice ripreso da troppo lontano ottiene un blocco che copre più moduli e una soglia mediata su tutti quanti, ovvero una differenza effettiva più piccola a partire esattamente dalla stessa illustrazione. Dimensionare un codice per la sua distanza di lettura fa parte quindi del suo budget di contrasto, non è un argomento a parte.
Il numero di progetto e il numero che arriva alla fotocamera sono diversi
Tutto ciò che sta fra il file di progetto e il sensore d'immagine sottrae contrasto, e le perdite si compongono invece di annullarsi. È tutta qui la ragione per cui i valori consigliati stanno sei volte sopra il limite minimo del decodificatore, e vale la pena elencarle invece di riassumerle, perché quasi tutte si possono correggere e le correzioni costano poco.
- La carta non è bianca. Le carte da ufficio e da offset non patinate riflettono all'incirca dall'80 al 90% della luce che le colpisce. Un rapporto di progetto di 21:1 non arriva come 21:1: arriva come quello che il supporto consente ancora prima di posare una goccia d'inchiostro.
- L'inchiostro si allarga. Sui supporti assorbenti i moduli scuri invadono le celle chiare accanto a loro, il che alza il valore più scuro e abbassa quello più chiaro dentro ogni blocco che il decodificatore misura. Kraft, carta da giornale e carta termica per scontrini sono i casi peggiori.
- Lucido e plastificazione aggiungono luce a entrambi. La riflessione speculare mette la stessa quantità di luce bianca nei moduli scuri e in quelli chiari, il che alza il livello del nero e comprime il rapporto - la stessa aritmetica del termine di riflesso nella formula del contrasto. Una plastificazione opaca costa un po' di nitidezza e restituisce più contrasto di quanto ne costi.
- La luce ambientale fa la stessa cosa. Un codice dietro la vetrina di un negozio alla luce del giorno ha sopra un velo di riflessi. Un codice in un ristorante poco illuminato ha davanti una fotocamera che alza il guadagno del sensore, il che aggiunge rumore proprio alla quantità che il binarizzatore misura.
- L'esposizione automatica è calcolata sull'inquadratura, non sul codice. Un codice scuro su una piccola etichetta chiara dentro una fotografia in gran parte scura viene esposto per la parte scura, e l'etichetta si brucia verso il bianco trascinandosi dietro i moduli.
- Il mosso è il moltiplicatore. L'errore di messa a fuoco e il movimento della mano mediano ogni pixel con i suoi vicini, e la media è precisamente ciò che riduce l'escursione fra il più chiaro e il più scuro dentro un blocco di 8 x 8. Contrasto basso e un po' di mosso non si sommano, si moltiplicano, ed è per questo che un codice al limite passa quando qualcuno tiene fermo lo smartphone e fallisce quando non lo fa.
Gli schermi hanno la loro versione della stessa lista, il che sorprende chi dà per scontato che un display sia un ambiente controllato. Uno smartphone al 20% di luminosità sotto il sole, dietro una pellicola opaca, che mostra un codice dentro un browser che gli ha applicato un filtro per la modalità scura, non sta consegnando il rapporto scritto nel file di progetto. Il rapporto di progetto è il tetto di ciò che si può ottenere, mai il valore che arriva.
Quindi la risposta a "quanto contrasto serve agli smartphone" è che agli smartphone ne serve pochissimo e ai flussi di lavoro ne serve moltissimo. Il margine che stai mettendo a budget non è margine contro il decodificatore. È margine contro le otto cose qui sopra, nessuna delle quali si vede sul monitor su cui viene presa la decisione.
La scala del contrasto: un test che produce il tuo numero
Il modo per trovare il limite minimo di contrasto di un lavoro specifico è stampare lo stesso codice a otto livelli di contrasto decrescenti sul materiale vero e annotare dove smette di funzionare. Richiede una ventina di minuti, costa un foglio di carta e produce un numero valido per la tua stampante, il tuo supporto e gli smartphone dei tuoi clienti, non per quelli di qualcun altro.
Gli otto gradini qui sotto sono grigi sul bianco, scelti in modo che ciascuno cada su un rapporto di contrasto tondo. Genera lo stesso contenuto otto volte, una per ciascun colore di primo piano, tieni lo sfondo bianco puro, tieni forma e dimensione dei moduli identiche in tutti e otto, e disponili su un unico foglio nell'ordine indicato.
| Primo piano sul bianco | Rapporto di contrasto | Differenza di luminanza (su 255) | Differenza di riflettanza |
|---|---|---|---|
| #000000 | 21:1 | 255 | 100% |
| #595959 | 7,0:1 | 166 | 90% |
| #7F7F7F | 4,0:1 | 128 | 79% |
| #949494 | 3,0:1 | 107 | 70% |
| #A3A3A3 | 2,5:1 | 92 | 63% |
| #B7B7B7 | 2,0:1 | 72 | 53% |
| #D2D2D2 | 1,5:1 | 45 | 36% |
| #E7E7E7 | 1,24:1 | 24 | 20% |
- Stampa gli otto gradini alla dimensione finale sul supporto finale. Un foglio, tutti e otto i codici alla dimensione che avrà il codice vero, sul materiale che usa il lavoro vero. Una stampa laser d'ufficio su carta da fotocopie non è il test se il lavoro finisce su kraft, sull'etichetta di una bottiglia o su una carta del menù - l'allargamento dell'inchiostro varia col materiale e si sottrae dallo stesso budget del colore.
- Scansiona ogni gradino con due smartphone, solo fotocamera nativa. Uno iOS e uno Android, usando l'app fotocamera integrata invece di un'app di scansione. Le app di scansione dedicate sono più tolleranti di quelle native e passeranno gradini che i tuoi clienti non riescono a leggere. Annota il primo gradino che fallisce su uno dei due smartphone.
- Ripeti sotto la luce in cui il codice vivrà. Porta lo stesso foglio nel posto vero - il tavolo del ristorante, lo scaffale del negozio, l'insegna all'aperto al crepuscolo. L'illuminazione sposta il punto di fallimento di più gradini di qualsiasi altra singola variabile, ed è il passo che si salta.
- Ripeti alla distanza vera e con un'angolazione vera. Scansiona da dove una persona sta davvero, e una volta a circa 30 gradi rispetto alla perpendicolare. La distanza riduce i pixel per modulo, il che restringe la differenza che vede ciascun blocco; l'angolazione costa ancora un po' della stessa cosa.
- Ripeti senza tenere fermo lo smartphone. Tienilo alla maniera sbadata, con una mano sola, in movimento. Il mosso riduce l'escursione fra il più chiaro e il più scuro dentro ogni blocco, quindi questo giro di solito fallirà un gradino prima di quello attento. Il numero sbadato è il numero vero.
- Progetta due gradini sopra il primo fallimento. Prendi il risultato peggiore fra tutte le condizioni e sali di due gradini sulla scala. Due gradini sono il margine operativo per le variabili che il test non poteva includere - un altro smartphone, una giornata più fredda, una testina di stampa consumata, una plastificazione che il campione non aveva.
Un gradino merita una nota. La riga #000000 è un controllo, non un test: se il nero sul bianco fallisce su quel foglio, il problema è la dimensione, la messa a fuoco, i riflessi o la zona di silenzio, e nulla più in basso nella scala ti dirà qualcosa finché non è risolto.
Il colore non è contrasto, e le due metriche non sono d'accordo
Il rapporto di contrasto di un colore prevede male come quel colore si comporta davanti a una fotocamera, perché i due numeri sono costruiti in modo diverso. Un rapporto di contrasto è un unico numero che confronta la luminanza relativa di due colori, e va da 1:1 per due colori identici a 21:1 per il nero sul bianco. Pesa il verde al 71% della luminosità percepita, applica una curva gamma e aggiunge un piccolo termine di riflesso che penalizza deliberatamente le coppie scure. Il canale di grigi di una fotocamera pesa il verde al 59%, il rosso al 30% e il blu all'11%, e non aggiunge nulla.
| Colore sul bianco | Rapporto di contrasto | Differenza di luminanza (su 255) |
|---|---|---|
| Nero #000000 | 21:1 | 255 |
| Blu notte intenso #0F172A | 17,9:1 | 232 |
| Rosso scuro #7F1D1D | 10:1 | 197 |
| Blu puro #0000FF | 8,6:1 | 226 |
| Blu di marca #1D4ED8 | 6,7:1 | 176 |
| Verde web #008000 | 5,1:1 | 180 |
| Rosso #DC2626 | 4,8:1 | 163 |
| Rosso puro #FF0000 | 4,0:1 | 179 |
| Verde #16A34A | 3,3:1 | 144 |
| Magenta #FF00FF | 3,1:1 | 150 |
| Arancione #FF7F00 | 2,5:1 | 104 |
| Ambra #F59E0B | 2,2:1 | 88 |
| Verde puro #00FF00 | 1,4:1 | 105 |
| Ciano #00FFFF | 1,25:1 | 76 |
| Giallo #FFFF00 | 1,07:1 | 29 |
Il blu puro è il caso che salta all'occhio ed è la scoperta utile della tabella. Con 8,6:1 e una differenza di luminanza di 226 è secondo solo al quasi nero su entrambe le misure, il che fa del blu intenso il colore saturo più sicuro per un codice QR con ampio margine. Lo seguono i rossi intensi e i prugna scuri. Qualsiasi colore il cui rapporto derivi dall'essere scuro anziché dall'essere saturo si comporta bene. Quali palette restino utilizzabili, e dove stiano bene, è il tema dei codici QR colorati.
Il verde puro è il punto in cui le due metriche divergono di più ed è comunque il punto in cui conviene fidarsi del rapporto. Il suo rapporto di 1,4:1 sembra catastrofico mentre la sua differenza di luminanza di 105 è pari ai 104 dell'arancione, quindi la fotocamera vede in un codice verde più di quanto il rapporto lasci intendere. Non basta lo stesso: 105 su 255 è meno di metà scala prima che la carta, la luce e l'obiettivo si prendano la loro parte, e i codici verdi sono quelli che con affidabilità funzionano nel mockup e falliscono sullo scaffale.
Giallo, ciano e ambra falliscono su entrambe le misure e non c'è tecnica che li salvi. Il giallo sul bianco dà alla fotocamera una differenza di 29 livelli su 255 - appena sopra i 24 ai quali ZXing smette del tutto di cercare un bordo. Un codice giallo non è un codice rischioso, è un oggetto decorativo che ogni tanto si legge in condizioni perfette.
Quando un colore di marca non arriva all'obiettivo, la soluzione è sempre la stessa e va sempre in una direzione: scurisci il codice, non schiarire lo sfondo. Gli sfondi devono restare vicini al bianco perché la differenza di riflettanza sopravviva alla stampa, e un colore di marca portato due o tre passi più scuro di solito mantiene la sua identità raddoppiando il proprio rapporto. Dove questo è inaccettabile, metti il colore di marca nella cornice, nell'etichetta e nella chiamata all'azione attorno al codice e lascia scuro il codice in sé - i codici QR brandizzati sono soprattutto questo, e non costano contrasto per niente.
I moduli chiari su sfondo scuro sono un problema a parte
Un codice QR invertito - moduli chiari su sfondo scuro - può avere un rapporto di contrasto perfetto e fallire lo stesso, perché il rapporto è simmetrico e il decodificatore no. Il bianco sul nero dà gli stessi 21:1 del nero sul bianco, e nessun controllo del contrasto lo segnalerà mai. Quello che varia è se il software dall'altra parte è disposto a provare l'immagine in entrambi i versi.
Le app fotocamera attuali di iPhone e Android in genere gestiscono i codici invertiti, e la cosa è migliorata costantemente. È sull'hardware più vecchio che si rompe: gli imager fissi, gli scanner delle casse e le apparecchiature da magazzino spesso si aspettano dati scuri su sfondo chiaro e non hanno alcun passaggio di inversione, e ZXing stesso inverte solo quando l'applicazione chiamante avvolge l'immagine nella sorgente di luminanza invertita che mette a disposizione - una decisione presa da chi ha costruito l'app, non dal codice.
La regola pratica è che l'inversione è una scommessa sul lettore, non una proprietà del codice. Per un manifesto, uno schermo o un post social letti da smartphone, un codice invertito è una scelta di design ragionevole. Per qualsiasi cosa che un cliente possa scansionare con apparecchiature ignote, o per qualsiasi cosa letta a una cassa, è un lancio di monetina fatto per ragioni estetiche, e la versione sicura - un codice scuro dentro un pannello chiaro, sopra lo sfondo scuro - costa un rettangolo.
C'è un'ulteriore asimmetria che vale la pena nominare, perché a schermo è invisibile. Stampare un codice chiaro su sfondo scuro significa stendere un'ampia area scura piena, e una copertura piena si allarga più di una copertura rada. I moduli chiari sono quelli che si rimpiccioliscono, e sono quelli che il decodificatore sta leggendo come la metà chiara della coppia. Un codice invertito perde quindi più contrasto in stampa dello stesso codice nel verso giusto.
Che cosa misura la norma di stampa al posto di un rapporto
Il mondo dei codici QR ha una sua misura di contrasto e non è un rapporto. Il contrasto del simbolo è la misura di qualità di stampa definita dalla ISO/IEC 15415 come la differenza di riflettanza fra il punto più chiaro e quello più scuro di un simbolo. Si esprime in punti percentuali e si valuta da A fino a F. Un verificatore lo riporta insieme a modulazione, danni ai pattern fissi, non uniformità della griglia e correzione degli errori inutilizzata, e il voto complessivo del simbolo è il peggiore fra questi.
La distinzione conta perché una differenza di riflettanza e un rapporto di contrasto non sono due versioni intercambiabili della stessa cosa. La riflettanza è luce lineare; un rapporto di contrasto ci applica sopra una curva gamma e un termine di riflesso. Fai i conti e la divergenza è ampia: una differenza di riflettanza del 40%, il livello comunemente richiesto nelle specifiche del retail, corrisponde sul bianco ideale a un rapporto di contrasto di circa 1,6:1, e una differenza del 70% a circa 3:1. Una coppia di colori che un verificatore di accessibilità web boccia senza appello può essere un codice a barre perfettamente conforme.
Non è una licenza per progettare a 3:1. È una spiegazione del perché i due settori non vadano d'accordo: un verificatore misura un campione stampato sotto luce controllata a una distanza fissa con il simbolo che riempie l'apertura, mentre il rapporto di un designer deve sopravvivere a uno smartphone tenuto in tasca. La norma sta misurando l'oggetto, il rapporto viene usato come approssimazione dell'intera catena.
La trappola dentro la norma è la luce che usa. La verifica dei codici a barre si esegue sotto illuminazione rossa a 660 nanometri, la lunghezza d'onda che usavano i primi scanner laser e che i verificatori moderni ancora emulano; il voto di un simbolo si cita insieme a essa, come in 4.0/20/660. L'inchiostro rosso riflette la luce rossa, quindi un codice rosso su carta bianca non ha quasi contrasto a 660 nm e viene valutato illeggibile pur leggendosi perfettamente su qualsiasi smartphone. È questa la ragione specifica per cui un codice QR rosso può superare ogni controllo che fa un designer e fallire a una cassa o su un imager da magazzino.
La regola che ne segue: qualsiasi cosa venga letta da apparecchiature fisse anziché dai clienti dovrebbe essere nera su bianco, alla dimensione che chiede la documentazione di quelle apparecchiature, e verificata invece che valutata a occhio. Qualsiasi cosa venga letta dagli smartphone ha a disposizione tutto lo spazio colore, meno le parti che la tabella qui sopra esclude.
I numeri su cui progettare
Punta a un rapporto di contrasto di almeno 7:1 per tutto ciò che è stampato, di almeno 4:1 per tutto ciò che si mostra su uno schermo, e tratta 3:1 come il punto sotto il quale un codice non deve andare in produzione, per quanto bene stia nel mockup. Quei valori sono obiettivi di progetto che hanno già dentro il prezzo delle perdite delle sezioni precedenti, non soglie misurate da qualcuno su uno smartphone.
- Stampa in condizioni non controllate - menù, packaging, segnaletica, adesivi. 7:1 o meglio. Il nero o il quasi nero sul bianco è 21:1 e non costa nulla; lo scarto fra 21:1 e 7:1 è lo spazio in cui ci sta un colore di marca.
- Stampa su supporti assorbenti o scomodi - kraft, carta da giornale, scontrini, tessuto, superfici incise. Non spendere contrasto per niente. Nero sullo sfondo più chiaro disponibile, e metti il budget nella dimensione dei moduli.
- Schermi - siti web, presentazioni, schermate di app, video. 4:1 o meglio, tenendo presente che la luminosità di chi guarda e la luce ambientale sono fuori dal tuo controllo.
- Qualsiasi cosa letta da scanner fissi, o regolata da una specifica. Nero su bianco, verificato. Qui il colore è un rischio senza alcun vantaggio, e il rosso è un rischio con una modalità di fallimento precisa.
- Sotto 3:1. Non mandarlo in produzione. Non è un codice al limite che qualche smartphone riuscirà a gestire - è un codice il cui margine è tutto speso prima ancora che sia scelta la carta.
Un controllo che è facile dimenticare: i tre marcatori d'angolo contano. Uno scanner individua un codice QR tramite i suoi pattern di ricerca prima di decodificare qualsiasi cosa, quindi un codice con i moduli scuri e gli angoli in un colore d'accento chiaro ha il suo contrasto più debole esattamente dove il fallimento non è recuperabile. Qualunque strumento tu usi, valuta separatamente il colore degli angoli rispetto allo sfondo e prendi il peggiore dei due valori come contrasto reale del codice.
KoloQR, un generatore di codici QR gratuito con codici QR circolari e di forma personalizzata, calcola quella coppia automaticamente: l'indicatore accanto all'anteprima riporta il rapporto di contrasto del colore del pattern e del colore degli angoli rispetto allo sfondo, mostra il peggiore dei due e passa a 4:1. Considera bianco uno sfondo trasparente, dato che è lì che un codice trasparente di solito finisce. Puoi preparare la scala nel generatore esportando lo stesso contenuto con ciascuno degli otto grigi qui sopra e stampando il foglio.
Il limite onesto di tutto quanto c'è qui: nessuno di questi numeri garantisce una lettura su hardware che non abbiamo testato, e deliberatamente non abbiamo pubblicato alcun valore per uno smartphone dal nome preciso perché non ne abbiamo misurato nessuno. La scala esiste perché tu possa farlo. Venti minuti e un foglio di carta producono un numero vero per il tuo lavoro, e vale più di qualsiasi valore in questo articolo.
Quando il contrasto non è davvero il problema
La maggior parte dei codici QR di cui si incolpa il contrasto fallisce per una di altre quattro ragioni, e alzare il contrasto in ognuno di questi casi non cambia nulla. Passare prima da questa lista è più rapido che fare la scala, perché tre delle quattro cose si vedono senza uno smartphone.
- Il codice è troppo piccolo per la distanza. Sotto i circa 0,4 mm per modulo in stampa, le fotocamere degli smartphone faticano qualunque siano i colori. Misura un modulo prima di regolare qualsiasi altra cosa.
- La zona di silenzio è stata tagliata. La ISO/IEC 18004 prescrive un margine libero di quattro moduli attorno al simbolo, e un designer che si riprende quello spazio per l'impaginazione è una delle cause più comuni di un codice che viene benissimo in fotografia e non si decodifica mai.
- L'immagine è stata salvata come JPEG a un certo punto del flusso di lavoro. La compressione JPEG mette anelli tenui attorno a ogni modulo, il che abbassa la differenza locale esattamente dentro i blocchi che il binarizzatore misura. Sembra un problema di contrasto ed è un problema di formato di file.
- I riflessi. Una plastificazione lucida o uno schermo che riflette una luce a soffitto non riduce affatto il contrasto di progetto - aggiunge una macchia luminosa su una parte del simbolo, e i blocchi sotto quella macchia perdono la loro differenza mentre il resto del codice sta bene. Inclinare lo smartphone risolve, ed è questa la spia.
Anche la correzione degli errori appartiene a questa lista, in negativo. Alzare il livello da M a H non aiuta un codice a basso contrasto, perché la correzione degli errori ripara i moduli che il decodificatore ha letto male e il contrasto basso impedisce del tutto al decodificatore di leggere il simbolo. Il compromesso fra capacità di recupero e dimensione del modulo è una decisione reale, e non è la leva per questo problema. La leva per questo problema è un primo piano più scuro, uno sfondo più chiaro o un codice più grande.
Il fallimento collegato che vale la pena conoscere, dato che decorazione e contrasto si spendono dallo stesso budget: le forme decorative dei moduli inchiostrano meno di ogni cella rispetto ai moduli quadrati, il che riduce la differenza locale che il binarizzatore misura allo stesso modo del contrasto basso. Quanto costa davvero una forma personalizzata di codice QR sviluppa quell'aritmetica, e i due effetti si sommano: un codice con stile in un colore di marca chiaro sta spendendo due volte da un unico budget.
Crea il tuo codice QR
Gratis, senza account e senza filigrana. Scegli una forma, aggiungi un logo, controlla il contrasto ed esporta in SVG, PDF, EPS o PNG: un codice statico senza abbonamento dietro.
Genera codice QRQuestions? Answered
Come obiettivo di progetto, 7:1 per la stampa e 4:1 per gli schermi, con 3:1 come la soglia sotto la quale un codice non deve andare in produzione. Il limite minimo del decodificatore in sé è molto più basso - ZXing smette di rilevare un bordo quando il pixel più chiaro e quello più scuro di un blocco differiscono di 24 su 255, circa 1,24:1 - ma quel limite vale per un'immagine digitale pulita, non per l'inchiostro sulla carta sotto la luce di un negozio.
Né Apple né Google pubblicano una soglia, quindi qualsiasi valore preciso tu veda citato non è una misurazione che qualcuno possa verificare. Entrambi i decodificatori sono a codice chiuso. L'unico punto di riferimento leggibile è ZXing, che si arrende a circa 1,24:1 su un'immagine pulita, e la risposta pratica per un lavoro vero è stampare una scala di livelli di contrasto decrescenti e trovare dove fallisce la tua combinazione di supporto, luce e smartphone.
Perché uno schermo consegna il contrasto di progetto e la carta no. Il supporto bianco riflette dall'80 al 90% invece del 100%, l'inchiostro invade le celle chiare accanto a ogni modulo scuro, e il lucido o la luce ambientale aggiungono un velo luminoso su entrambi. Una coppia che nel file di progetto risulta 3:1 può arrivare alla fotocamera più vicina a 2:1. Testa sul materiale vero alla dimensione finale, mai su un monitor.
Di solito sì, se il colore è scuro e non semplicemente saturo. Blu intensi, blu notte e rossi scuri superano tutti 7:1 sul bianco e si comportano bene davanti alla fotocamera. Arancioni, ambra, ciano e gialli no, e nessun livello di correzione degli errori li salva. Quando un colore di marca non arriva, scurisci il codice invece di schiarire lo sfondo - oppure tieni scuro il codice e metti il colore di marca nella cornice attorno.
Sugli smartphone attuali di solito sì. Su scanner più vecchi o fissi spesso no. Un rapporto di contrasto è simmetrico, quindi il bianco sul nero dà gli stessi 21:1 del nero sul bianco e nessun controllo del contrasto ti avviserà: quello che varia è se il lettore prova l'immagine invertita. I codici invertiti perdono anche più contrasto in stampa, perché la copertura scura piena invade i moduli chiari. Usali dove gli smartphone sono l'unico lettore.
Una sfumatura di solito sopravvive e una fotografia di solito no, e il motivo è che i decodificatori applicano la soglia localmente. ZXing calcola un confine chiaro-scuro separato per ogni blocco di 8 x 8 pixel, quindi uno sfondo che cambia lentamente mantiene intatta la differenza locale ovunque. Una fotografia cambia più in fretta del codice, quindi da qualche parte nel simbolo i moduli finiscono dalla parte sbagliata della soglia del proprio blocco.
Perché i verificatori di codici a barre e molti scanner fissi leggono sotto luce rossa a 660 nanometri, e l'inchiostro rosso riflette la luce rossa. Un codice rosso su carta bianca non ha quasi contrasto a quella lunghezza d'onda anche se una fotocamera a colori lo vede benissimo. È una trappola nota dal mondo dei codici a barre 1D e si applica immutata ai codici QR. Qualsiasi cosa venga scansionata da apparecchiature fisse dovrebbe essere nera su bianco.
Non sul bianco. Il giallo sul bianco dà a una fotocamera una differenza di luminanza di 29 livelli su 255, appena sopra i 24 ai quali ZXing smette del tutto di cercare un bordo, e un rapporto di contrasto di 1,07:1. I pastello stanno solo un po' meglio. Se una palette chiara è un requisito, ribalta il problema: un codice scuro dentro un pannello chiaro mantiene la palette e mantiene il contrasto.
No, ed è la correzione sbagliata più comune. La correzione degli errori ripara i moduli che sono stati letti in modo errato; il contrasto basso impedisce del tutto che il simbolo venga letto, perché la binarizzazione avviene prima che esistano dati da riparare. Alzare il livello da M a H rende anche il simbolo più denso a parità di larghezza stampata, il che rimpicciolisce ogni modulo e peggiora un codice al limite invece di migliorarlo.
Di più, nel senso che lì il fallimento non è recuperabile. Uno scanner individua un codice QR tramite i suoi tre marcatori d'angolo prima di decodificare qualsiasi cosa, quindi angoli chiari su un codice scuro mettono il contrasto più debole esattamente dove la correzione degli errori non arriva. Valuta separatamente il colore degli angoli rispetto allo sfondo e tratta il peggiore dei due valori come contrasto reale del codice.
Continua a esplorare
Pagine che riprendono da dove finisce questa: lo stesso contesto, lo stesso tipo di codice o la prossima decisione da prendere.
Negozi al dettaglio
Schede prodotto, disponibilità e link alle recensioni su etichette da scaffale, vetrine e cartelli alla cassa.
Agenzie di eventi
Codici prodotti per l'evento di qualcun altro: reindirizzamenti del cliente, specifiche per gli espositori, tirature di badge e segnaletica dimensionata sulla sala.
Codici QR colorati
Porta la tua palette su un codice QR senza romperlo: quale colore va sul pattern e quale appartiene alla cornice.
Banner e striscioni
Roll-up, fondali fieristici e striscioni da esterno - la dimensione che impone la distanza, l'altezza che funziona e perché mesh e vento rompono le scansioni.
Veicoli
Furgoni, auto e flotte - la dimensione che il codice vuole visto dal marciapiede e il punto della carrozzeria dove sopravvive a rivetti, fughe e sporco.
Un QR code in uno spot video vuole un terzo dello schermo. Ne riceve un angolo
Un QR code in uno spot video deve occupare da un quarto a un terzo dell'altezza dello schermo perché un telefono sul divano riesca a leggerlo. Quasi tutti quelli che hai visto sono un logo in un angolo, e abbiamo misurato che fine fanno.
Perché KoloQR?
- Crea codici QR per siti web, menù, Wi-Fi, PDF e biglietti da visita
- Personalizza colori, loghi e forme uniche
- Scarica file PNG e SVG di alta qualità
- Pensato sia per la stampa che per il digitale

