SWAPQR← Ratgeber

Halftone-QR-Codes vs. gedithterte QR-Codes

Beide Ansätze setzen ein Bild in einen funktionierenden QR-Code. Sie sind nicht dieselbe Technik, und man kann sie quer durch den Raum auseinanderhalten: Einer sieht aus wie ein Bild hinter einem Fliegengitter, der andere wie fotografisches Korn. Dieser Artikel erklärt, was jeder tut, warum sie unterschiedlich aussehen, wo einer klar gewinnt und wo keiner gewinnt.

QR-Code im Browser erstellen →Das Quadrat einmal drucken. Später entscheiden, wohin es führt.

Die Halftone-Methode

Der klassische Halftone-QR-Generator, seit etwa 2013 im Umlauf, verdreifacht die Größe des Codes. Jedes Modul wird zu einem 3×3-Block aus Subpixeln. Das mittlere Subpixel wird auf die vom Modul geforderte Farbe festgelegt; die anderen acht dürfen annehmen, was das (bereits binarisierte) Bild vorgibt. Ein Scanner tastet Modulmitten ab, also müssen die Mitten stimmen — und das tun sie. Es funktioniert und erzeugt einen wiedererkennbaren Look: ein regelmäßiges Punktgitter, das auf dem Bild sitzt, weil jedes dritte Pixel in beiden Richtungen festgelegt ist und diese festgelegten Pixel perfekt ausgerichtet sind. Ihr Auge ist extrem gut darin, ein regelmäßiges Gitter zu finden. Wenn Sie es einmal sehen, können Sie es nicht mehr übersehen. Der Ansatz ist einfach zu implementieren und leicht nachzuvollziehen, weshalb so viele Generatoren ihn verwenden, und für einen Code, der nur je auf einem Bildschirm in seiner nativen Größe betrachtet wird, ist er völlig brauchbar. Seine Grenzen zeigen sich im Druck, wo nichts je in nativer Größe betrachtet wird und ein einzelnes festgelegtes Pixel pro Modul den Drucker, das Papier, die Beleuchtung und das Resampling der Kamera allein überstehen muss.

Die Dither-Methode

Der Dither-Ansatz ändert eine Sache, und sie ändert alles. Statt das Bild zuerst zu binarisieren und dann Pixel zu überschreiben, dithert er das Bild mit Fehlerdiffusion und behandelt ein erzwungenes Pixel als Teil dieses Prozesses: den Wert erzwingen, den durch das Erzwingen verursachten Fehler messen und diesen Fehler in die Nachbarpixel schieben, so wie Floyd–Steinberg jeden anderen Fehler schiebt. Das Ergebnis ist, dass die erzwungenen Pixel kompensiert werden. Die Pixel um sie herum verschieben sich, um den lokalen Durchschnitt korrekt zu halten, sodass die erzwungenen Punkte in denselben unregelmäßigen Sprenkeln sitzen wie der Rest des Bildes. Es gibt kein Gitter, auf das sich das Auge einrasten könnte, und das Bild wird als Bild gelesen statt als Bild hinter einem Fliegengitter. Die erzwungene Region muss auch kein einzelnes Pixel sein: Sie kann ein Block in der Mitte jedes Moduls sein, dessen Größe eine Einstellung ist — genau das steuert SWAPQRs Foto ↔ Code-Balance. Der Rest des Moduls — und das Bild darin — ist, was die Fehlerdiffusion übrig lässt, und das hat konstruktionsbedingt den richtigen Durchschnittston für das Modul, zu dem es gehört.

Seite an Seite

In der Halftone-Methode wird das Bild binarisiert, bevor der Code platziert wird; in der Dither-Methode geschehen beide zusammen, in einem einzigen Durchgang. Halftone erzwingt ein Subpixel pro Modul, auf einem perfekten Gitter; Dithering erzwingt einen Mittelblock einstellbarer Größe, versteckt in den Sprenkeln. Die visuelle Signatur von Halftone ist ein regelmäßiges Punktgitter über dem Bild; die von Dithering fotografisches Korn. Halftone bietet wenig Abstimmung — eines von neun Pixeln ist fest, und das war's — während Dithering eine stufenlose Wahl bietet, wie viel von jedem Modul erzwungen wird. Und in der Nahaufnahme-Robustheit ist Halftone schwach, weil ein Pixel pro Modul kein Resampling überlebt, während das gedithterte Ergebnis abstimmbar und, wie der Nahaufnahme-Artikel in diesem Ratgeber zeigt, messbar ist: Unter etwa der Hälfte des erzwungenen Moduls haben ältere Block-Schwellenwert-Leser bei extremer Nahaufnahme Schwierigkeiten; darüber nicht. Die beiden Methoden sind keine Variationen eines Themas; sie beantworten die Frage "wohin kommt das Bild" in unterschiedlicher Reihenfolge, und diese Reihenfolge ist, was das Auge sieht.

Wo Dithering deutlich gewinnt

Weil die Menge des Erzwingens ein Regler ist und kein festes Eins-von-Neun, kann ein Dither-Generator Bild gegen Zuverlässigkeit gezielt abwägen. Das ist kein kosmetischer Unterschied: Bei einem erzwungenen Pixel pro Modul hängt der Code davon ab, dass ein einzelnes Pixel jeden Resampling-Schritt zwischen Drucker und Sensor überlebt, und oft tut es das nicht. Ein Tintenstrahler verbreitert es, ein Laserdrucker rundet es, eine Laminierung verwischt es, eine Kamera im Winkel verschmiert es über zwei Sensorpixel, und das eigene Herunterskalieren des Decoders mittelt es mit seinen Nachbarn. Stattdessen einen Block zu erzwingen — und die Fehlerdiffusion dafür bezahlen zu lassen — ist es, was die Technik im Druck standhalten lässt. Es bedeutet auch, dass derselbe Generator einen fast schlichten Code für einen Aufkleber, an den Menschen ein Telefon halten werden, und ein fast reines Foto für ein Plakat, das aus einem Meter gescannt wird, erzeugen kann, aus demselben Bild und demselben Link, durch das Bewegen eines einzigen Reglers. Halftone hat keinen solchen Regler: Seine Zuverlässigkeit und sein Aussehen sind durch die Methode festgelegt, und der einzige Weg, es robuster zu machen, ist, es zugunsten einer größeren festgelegten Region aufzugeben, womit es zur Dither-Methode mit schlechterer Kompensation geworden ist.

Wo keiner gewinnt

Kein Ansatz macht ein schlechtes Foto gut, und keiner übersteht eine lange Nutzlast. Beide brauchen Fehlerkorrektur auf der höchsten Stufe, was den Code selbst dichter macht. Ein flaches, kontrastarmes Bild scheitert in beiden, aus demselben Grund: Es erzeugt eine gleichmäßige Textur, die mit den Modulen konkurriert. Ein langer Link scheitert in beiden, weil die Module zu klein werden, um irgendein Bild zu tragen. Und beide sind am Ende ein bewusster Kompromiss: Sie geben Zuverlässigkeit aus, um ein Bild zu kaufen. Geben Sie sie dort aus, wo das Bild etwas wert ist, und testen Sie den Druck. Es gibt eine dritte Familie, die es zu nennen lohnt: Generatoren, die ein unberührtes Bild hinter einen normalen Code legen und die Module einfach aufhellen, oder die ein Logo aus der Mitte stanzen. Die kodieren das Bild überhaupt nicht — sie verlassen sich darauf, dass die Fehlerkorrektur den Schaden absorbiert. Völlig zulässig, viel weniger interessant und viel stärker begrenzt darin, wie viel Bild man bekommt, weil die gesamten Kosten aus dem Fehlerkorrektur-Budget bezahlt werden, ohne dass etwas sie kompensiert.

AspektHalftone (3×3)Gedithert (Fehlerdiffusion)
Wann das Bild binarisiert wirdVor dem Platzieren des CodesZusammen mit dem Code
Erzwungene PixelEines pro Modul, auf einem perfekten GitterEin Mittelblock, versteckt in den Sprenkeln
Visuelle SignaturRegelmäßiges Punktgitter über dem BildFotografisches Korn
Verfügbare AbstimmungWenig — 1 von 9 Pixeln ist festStufenlos — Sie wählen, wie viel von jedem Modul erzwungen wird
Nahaufnahme-RobustheitSchwach — ein Pixel pro Modul überlebt kein ResamplingAbstimmbar und messbar

Häufig gestellte Fragen

Welche Methode verwendet SWAPQR?

Die Dither-Methode. Das Bild wird mit Floyd–Steinberg-Fehlerdiffusion reduziert, die Pixel, die der Code braucht, werden erzwungen und ihr Fehler in die Nachbarn verteilt, und die Größe des erzwungenen Blocks ist die Foto ↔ Code-Balance.

Warum sieht ein Halftone-Code aus, als läge ein Gitter darüber?

Weil in jedem 3×3-Block genau ein Subpixel festgelegt ist und diese festgelegten Pixel in beiden Richtungen perfekt ausgerichtet sind. Das Auge findet ein regelmäßiges Gitter sofort.

Ist ein aus der Mitte ausgeschnittenes Logo dasselbe?

Nein. Das verlässt sich darauf, dass die Fehlerkorrektur eine beschädigte Region absorbiert; nichts kompensiert den Schaden. Es ist zulässig, erlaubt aber weit weniger Bild als die Halftone- oder die Dither-Methode.

Brauchen beide die höchste Fehlerkorrektur?

Ja. Beide geben einen Teil des Wiederherstellungsbudgets des Codes für das Bild aus, also werden beide auf der höchsten Stufe erzeugt, was den Code dichter macht und ein weiterer Grund ist, den Link kurz zu halten.

Das Quadrat einmal drucken. Später entscheiden, wohin es führt. SWAPQR erstellt statische QR-Codes kostenlos, mit allen Stiloptionen, ohne Konto und ohne Wasserzeichen. Ein bezahlter Plan macht einen Code dynamisch: Das gedruckte Quadrat bleibt gleich, während Sie sein Ziel ändern, und Sie sehen, wie oft es gescannt wurde, nach Tag und nach Gerät.

QR-Code im Browser erstellen
Sprache: TR EN DE ES FR IT PT AR RU JA KO