QR code inversé : modules clairs sur fond sombre, bonne idée ? — featured illustration
Technologie

QR code inversé : modules clairs sur fond sombre, bonne idée ?

7 min de lecture
Créer un QR code

Un QR code inversé, avec des modules clairs sur un fond foncé, relève du pari plutôt que du choix de design. La norme prévoit du foncé sur du clair, et le logiciel qui repère un code cherche d'abord les zones foncées. Un code inversé ne se lit que si le lecteur a été doté d'une seconde tentative qui inverse l'image. Les appareils photo des téléphones l'ont souvent ; les lecteurs dédiés, les bornes et les scanners d'entrepôt, beaucoup moins. Un fond sombre autour du code ne pose aucun problème : c'est l'inversion qui est un pari sur le lecteur qui se présentera.

Une charte de marque arrive avec un thème sombre sur chaque page, et le code de la quatrième de couverture est dessiné comme tout le reste : modules pâles sur presque noir. Il se lit sur le téléphone du graphiste, il est validé, il est imprimé, puis il échoue à l'endroit unique pour lequel il avait été commandé : une borne de hall dont le scanner n'a jamais tenté un symbole inversé.

La spécification choisit une polarité

La norme ne parle pas de noir et de blanc mais de réflectance. L'élément sombre est celui qui renvoie peu de lumière, l'élément clair celui qui en renvoie beaucoup, et un bit à 1 correspond au module sombre. Autrement dit, le sombre sur clair n'est pas un habillage graphique appliqué à un format qui serait indifférent : c'est la définition même du symbole.

Un code inversé n'est donc pas un QR code habillé d'un autre jeu de couleurs. C'est un QR code dont la polarité de chaque module est retournée, et un lecteur qui prend l'image au pied de la lettre récupère le complément de vos données. Cela ne décode rien, et c'est normal.

Ce qui casse, c'est la recherche, pas le décodage

Avant de lire la moindre donnée, le lecteur doit trouver le code. Il fait courir des lignes de balayage dans l'image à la recherche d'une suite précise de plages, sombre, clair, sombre, clair, sombre, dans des proportions d'environ 1:1:3:1:1. Cette signature est ce qui rend un motif de repérage reconnaissable à n'importe quelle taille et sous n'importe quel angle, et l'anatomie des motifs de repérage explique pourquoi ces proportions tiennent.

Sur un symbole inversé, les longueurs de plages sont toutes encore là et le rapport est intact. Ce qui a changé, c'est que la première plage est claire, donc un détecteur qui teste une suite commençant par du sombre ne trouve aucun candidat nulle part dans l'image.

Cela change le sens de l'échec. La détection échoue avant que le décodage soit tenté : le code n'est pas mal lu, il n'est pas trouvé du tout. Ni la taille, ni l'éclairage, ni le contraste, ni la résolution ne déplacent le résultat, et c'est pourquoi un code inversé ne peut pas être sauvé en l'agrandissant, et pourquoi le symptôme est en général qu'il ne se passe rien plutôt qu'une lecture partielle. Comment un lecteur localise un symbole décrit le même processus par l'autre bout.

Les lecteurs qui s'en sortent réessaient, ils ne se conforment pas

Gérer l'inversion n'est pas une fonction du format, et aucun indicateur à l'intérieur du symbole ne l'annonce. C'est une reprise au niveau applicatif : seuiller l'image, ne pas trouver de motifs de repérage, inverser le bitmap, relancer le détecteur. Plusieurs bibliothèques de décodage très répandues ne tentent pas cela si l'application ne le demande pas, et là où le support existe, c'est en général un comportement ajouté par le logiciel autour du décodeur plutôt qu'une propriété du décodeur.

Ce qui veut dire que le support varie selon l'application, la version et la plateforme plutôt que selon la marque inscrite au dos du téléphone, si bien que deux appareils du même fabricant peuvent se comporter différemment dès que l'un se met à jour. Un code qui se lit sur un téléphone et pas sur un autre est la version générale de ce problème, et l'inversion en est le cas le plus net. Les lecteurs qui s'en sortent sont aussi plus lents, puisque la tentative inversée passe en second, et un code qui met quatre secondes au lieu de se déclencher instantanément est un code que les gens abandonnent.

Les lecteurs fixes et embarqués sont l'échec fiable : bornes en libre-service, portiques de contrôle, scanners de caisse, panneaux de contrôle d'accès, imageurs d'entrepôt. Beaucoup listent le décodage inverse ou vidéo inverse comme une option de configuration livrée désactivée, parce que l'activer coûte du temps de décodage sur chaque image pour un cas qui ne se présente presque jamais dans leur métier. Rationnel de leur point de vue, fatal du vôtre : si un code doit un jour rencontrer du matériel qui ne vous appartient pas, l'inversion ne vous est pas offerte.

Le design sombre que vous vouliez vraiment

L'exigence n'est presque jamais que le code soit inversé. C'est que le code se tienne sur une page sombre. Deux choses différentes, et une seule est risquée.

La zone de silence impose le point de toute façon. Un symbole a besoin de quatre modules de champ libre autour de lui, au ton des modules clairs. Sur un code inversé ce champ est sombre, et il doit être fiablement plus sombre que vos modules clairs de la séparation qu'un code normal exige. Il vous faut un panneau dans les deux cas ; la seule question est dans quel sens.

Posez donc un panneau clair derrière un code normal sombre : une tuile, une carte, une forme arrondie en réserve, un bandeau clair au pied d'une affiche sombre. Cela se lit comme un élément de design assumé, satisfait honnêtement la zone de silence, et fonctionne sur tous les lecteurs jamais construits. Ce qui mange une zone de silence explique comment ce panneau se fait abîmer à l'impression.

Dans cette contrainte, il y a plus de latitude que la plupart des designs sombres n'en exploitent. Les modules peuvent être de n'importe quelle couleur sombre, à condition que la clarté se tienne franchement dans le bas de la plage, puisque la teinte est jetée pendant le seuillage et que seule la clarté est dépensée. Le fond n'a pas besoin d'être blanc non plus, et les cadres, les formes d'angle, les styles de modules et un logo dans la zone sûre sont tous permis. Régler les deux couleurs directement prend quelques secondes, et les seuils de contraste sont ce contre quoi il faut concevoir. Vérifiez ensuite en niveaux de gris : si modules et fond y sont difficiles à séparer, aucun lecteur ne les séparera.

Si vous inversez quand même

Parfois c'est un oui réfléchi : un écran, une application, une diapositive, une affiche que vous pouvez remplacer la semaine suivante.

  • Gardez une séparation de tons large : un code inversé à séparation faible cumule deux problèmes et un seul est récupérable.
  • Donnez-lui plus de taille que la distance de scan n'en demande, et gardez la zone de silence sombre à quatre modules.
  • Surveillez la taille des modules plutôt que la redondance. Les codes créés ici portent déjà le plus élevé des quatre niveaux, et ce sont précisément ces modules supplémentaires qui rétrécissent chacun d'eux : vérifiez donc que les modules restent plus grands que ce que la surface peut tenir. Les niveaux et leur coût traitent de cet arbitrage.
  • Imprimez la destination en texte brut en dessous. C'est la seule parade qui fonctionne quand un lecteur refuse tout net, et elle coûte une ligne de composition.
  • Jamais sur un emballage, des billets, du matériel que vous ne contrôlez pas, ou un tirage que vous ne pouvez pas réimprimer.

Le miroir est une autre question sous le même mot

Un code retourné de gauche à droite n'est pas inversé en tons, et il échoue pour une raison sans rapport : les trois motifs de repérage sont disposés avec un sens, et l'ordre de lecture des modules court dans une seule direction. Certains décodeurs détectent un symbole en miroir et le corrigent, d'autres non, et la conclusion pratique est la même.

Cela arrive plus par accident que par choix : une image retournée dans la mise en page, un artwork inversé au prépresse, un adhésif de vitrine imprimé pour se lire depuis l'autre côté du verre. Si un code échoue alors qu'il a l'air parfaitement correct, vérifiez d'abord s'il est retourné ; les codes sur verre et vitrines traitent le seul cas où le retourner est volontaire. La rotation, troisième voisine de la même question, ne coûte rien du tout, parce que les motifs de repérage existent précisément pour qu'un lecteur sache dans quel sens se tient un symbole : un code lu en biais se résout d'une façon dont l'inversion et le miroir ne bénéficient pas.

Et en France ?

La question se pose souvent avec les sites en mode sombre. Le système de design de l'État, utilisé par les sites publics français, propose par exemple un thème sombre. Si votre site ou votre application affiche un QR code, la bonne pratique est de le laisser en foncé sur fond clair dans un petit cadre blanc, même en mode sombre, plutôt que de l'inverser automatiquement avec le reste de l'interface.

C'est encore plus important quand le code doit être lu par un lecteur dédié, comme une borne de retrait, un portique d'accès ou une caisse automatique : ces appareils sont souvent réglés pour le foncé sur clair uniquement, et un code inversé y échoue sans explication.

Le test qui tranche

Et pas sur votre propre téléphone, qui est l'appareil le moins représentatif que vous ayez.

  1. Scannez sur le plus vieux téléphone de l'immeuble et sur un second d'un autre fabricant, tous deux avec l'application appareil photo d'origine et rien d'installé.
  2. Essayez de le flasher avec tout lecteur fixe ou portatif que le code rencontrera réellement. S'il en existe un dans le déploiement, ce test-là passe avant les autres.
  3. Chronométrez. S'il met une ou deux secondes de plus que la version sombre sur clair, cet écart est la reprise inversée, et c'est dans cet écart que les gens renoncent.
  4. Si l'un d'eux refuse, mettez un panneau clair derrière un code normal et passez à autre chose. Les autres raisons pour lesquelles un code refuse de se lire valent la peine d'être écartées si vous ne savez pas de quel problème il s'agit.

Chaque code construit ici est sombre sur clair par défaut, et ce défaut n'est pas de la timidité. Comme chaque code est dynamique, la destination reste modifiable avec un abonnement payant. La polarité du symbole imprimé, elle, ne l'est pas.

Partager cet article