SWAPQR← Guide

Codes QR en demi-teinte ou codes QR tramés

Les deux approches placent une image dans un code QR fonctionnel. Ce n'est pas la même technique, et vous pouvez les distinguer de l'autre bout d'une pièce : l'une ressemble à une image derrière une moustiquaire, l'autre à du grain photographique. Cet article explique ce que fait chacune, pourquoi elles ont un aspect différent, où l'une gagne nettement, et où aucune ne gagne.

Créer un code QR dans le navigateur →Imprimez le carré une fois. Décidez plus tard où il mène.

La méthode en demi-teinte

Le générateur QR en demi-teinte classique, en circulation depuis 2013 environ, triple la taille du code. Chaque module devient un bloc de 3×3 sous-pixels. Le sous-pixel central est fixé à la couleur exigée par le module ; les huit autres sont libres de prendre ce que dit l'image (déjà seuillée). Un scanner échantillonne les centres des modules, donc ce sont les centres qui doivent être justes — et ils le sont. Ça fonctionne, et ça produit un aspect reconnaissable : une grille régulière de points posée sur l'image, parce qu'un pixel sur trois dans les deux directions est fixé et que ces pixels fixés s'alignent parfaitement. Votre œil est extrêmement doué pour repérer un réseau régulier. Une fois que vous le voyez, impossible de ne plus le voir. L'approche est simple à implémenter et facile à raisonner, ce qui explique que tant de générateurs l'utilisent, et pour un code qui ne sera jamais vu que sur un écran à sa taille native elle est tout à fait utilisable. Ses limites apparaissent à l'impression, où rien n'est jamais vu à sa taille native et où un seul pixel fixé par module doit survivre seul à l'imprimante, au papier, à l'éclairage et au rééchantillonnage de l'appareil photo.

La méthode tramée

L'approche tramée change une seule chose et cela change tout. Au lieu de seuiller l'image d'abord puis d'écraser des pixels, elle trame l'image par diffusion d'erreur et traite un pixel forcé comme partie de ce processus : forcer la valeur, mesurer l'erreur que le forçage a causée, et pousser cette erreur vers les pixels voisins comme Floyd–Steinberg pousse n'importe quelle autre erreur. Résultat : les pixels forcés sont compensés. Les pixels autour d'eux se décalent pour garder la moyenne locale juste, de sorte que les points forcés se fondent dans le même moucheté irrégulier que le reste de l'image. Il n'y a pas de réseau sur lequel l'œil puisse s'accrocher, et l'image se lit comme une image plutôt que comme une image derrière une moustiquaire. La région forcée n'a pas non plus besoin d'être un seul pixel : ce peut être un bloc au centre de chaque module dont la taille est un réglage, ce que contrôle la balance Photo ↔ Code de SWAPQR. Le reste du module — et l'image qu'il contient — est ce que laisse la diffusion d'erreur, qui par construction a le bon ton moyen pour le module auquel il appartient.

Côte à côte

Dans la méthode en demi-teinte, l'image est seuillée avant que le code soit placé ; dans la méthode tramée, les deux se font ensemble, en une seule passe. La demi-teinte force un sous-pixel par module, sur une grille parfaite ; le tramage force un bloc central de taille réglable, caché dans le moucheté. La signature visuelle de la demi-teinte est un réseau régulier de points sur l'image ; celle du tramage, du grain photographique. La demi-teinte offre peu de réglage — un pixel sur neuf est fixé, point — tandis que le tramage offre un choix continu de la part de chaque module qui est forcée. Et en robustesse au gros plan, la demi-teinte est faible, parce qu'un pixel par module ne survit à aucun rééchantillonnage, alors que le résultat tramé est réglable et, comme le montre l'article sur le gros plan dans ce guide, mesurable : en dessous de la moitié environ du module forcé, les lecteurs anciens à seuillage par blocs peinent en gros plan extrême ; au-dessus, non. Les deux méthodes ne sont pas des variations sur un même thème ; elles répondent à la question « où va l'image » dans des ordres différents, et c'est cet ordre que l'œil voit.

Où le tramage gagne de loin

Parce que la quantité de forçage est un curseur et non un un-sur-neuf fixe, un générateur tramé peut échanger de l'image contre de la fiabilité à dessein. Ce n'est pas une différence cosmétique : à un pixel forcé par module, le code dépend de la survie d'un seul pixel à chaque étape de rééchantillonnage entre l'imprimante et le capteur, et souvent il ne survit pas. Un jet d'encre l'étale, une imprimante laser l'arrondit, un plastifiage le floute, un appareil photo en biais l'étire sur deux pixels du capteur, et la réduction d'échelle du décodeur lui-même le moyenne avec ses voisins. Forcer un bloc à la place — et laisser la diffusion d'erreur le payer — est ce qui fait tenir la technique à l'impression. Cela signifie aussi que le même générateur peut produire un code presque ordinaire pour un autocollant sur lequel les gens colleront un téléphone, et une photographie presque pure pour une affiche scannée à un mètre, à partir de la même image et du même lien, en déplaçant une seule commande. La demi-teinte n'a pas cette commande : sa fiabilité et son aspect sont fixés par la méthode, et le seul moyen de la rendre plus robuste est de l'abandonner pour une région fixée plus grande, auquel cas elle est devenue la méthode tramée avec une moins bonne compensation.

Où aucune ne gagne

Aucune approche ne rend bonne une mauvaise photographie, et aucune ne survit à une charge utile longue. Les deux ont besoin de la correction d'erreurs à son niveau le plus élevé, ce qui en soi rend le code plus dense. Une image plate et peu contrastée échoue dans les deux, pour la même raison : elle produit une texture uniforme qui concurrence les modules. Un lien long échoue dans les deux, parce que les modules deviennent trop petits pour contenir la moindre image. Et les deux sont, au bout du compte, un compromis délibéré : vous dépensez de la fiabilité pour acheter une image. Dépensez-la là où l'image vaut quelque chose, et testez l'impression. Il existe une troisième famille qui mérite d'être nommée : les générateurs qui placent une image intacte derrière un code normal en éclaircissant simplement les modules, ou qui découpent un logo au milieu. Ceux-là n'encodent pas du tout l'image — ils comptent sur la correction d'erreurs pour absorber les dégâts. Parfaitement valables, bien moins intéressants, et bien plus limités dans la quantité d'image obtenue, parce que tout le coût est payé sur le budget de correction d'erreurs sans rien pour le compenser.

AspectDemi-teinte (3×3)Tramé (diffusion d'erreur)
Quand l'image est seuilléeAvant de placer le codeEn même temps que le code
Pixels forcésUn par module, sur une grille parfaiteUn bloc central, caché dans le moucheté
Signature visuelleRéseau régulier de points sur l'imageGrain photographique
Réglage disponiblePeu — 1 pixel sur 9 est fixéContinu — choisissez la part de chaque module qui est forcée
Robustesse au gros planFaible — un pixel par module ne survit à aucun rééchantillonnageRéglable, et mesurable

Questions fréquentes

Laquelle SWAPQR utilise-t-il ?

La méthode tramée. L'image est réduite par diffusion d'erreur de Floyd–Steinberg, les pixels dont le code a besoin sont forcés et leur erreur diffusée vers les voisins, et la taille du bloc forcé est la balance Photo ↔ Code.

Pourquoi un code en demi-teinte semble-t-il avoir une grille par-dessus ?

Parce qu'exactement un sous-pixel de chaque bloc de 3×3 est fixé et que ces pixels fixés s'alignent parfaitement dans les deux directions. L'œil repère immédiatement un réseau régulier.

Un logo découpé au milieu, est-ce la même chose ?

Non. Cela compte sur la correction d'erreurs pour absorber une région endommagée ; rien ne compense les dégâts. C'est valable, mais cela permet bien moins d'image que la méthode en demi-teinte ou la méthode tramée.

Les deux ont-elles besoin de la correction d'erreurs la plus élevée ?

Oui. Les deux dépensent une partie du budget de récupération du code pour l'image, donc les deux sont générées au niveau le plus élevé, ce qui rend le code plus dense et constitue une raison de plus de garder le lien court.

Imprimez le carré une fois. Décidez plus tard où il mène. SWAPQR crée des codes QR statiques gratuitement, avec toutes les options de style, sans compte et sans filigrane. Un forfait payant rend un code dynamique : le carré imprimé reste le même pendant que vous changez sa destination, et vous voyez combien de fois il a été scanné, par jour et par appareil.

Créer un code QR dans le navigateur
Langue : TR EN DE ES FR IT PT AR RU JA KO