Ein QR-Code decodiert bei 1,2:1. Gestalte nicht einmal in die Nähe davon

vom KoloQR-TeamRecherche

Ein runder schwarz-weißer QR-Code-Aufkleber auf blauem Hintergrund, über einem cyanfarbenen Pillen-Label mit der Aufschrift „Minimum Contrast“ und einer weißen Pille, die einen schwarzen Punkt neben dem Hex-Wert #000000 enthält.

Weder Apple noch Google veröffentlicht einen Kontrastschwellenwert für die Kamera-Apps, die die meisten QR-Codes lesen, also stammt jede Zahl, die als Grenze von iPhone oder Android zitiert wird, aus einer Messung, die nie jemand veröffentlicht hat. Lesbar ist der Quelltext von ZXing, dem Open-Source-Decoder hinter einem großen Teil alles Übrigen: Er arbeitet in Blöcken von 8 x 8 Pixeln und behandelt einen Block, dessen hellstes und dunkelstes Pixel höchstens 24 von 255 Stufen auseinanderliegen, als enthielte er überhaupt keine Kante. Das ist ein Kontrastverhältnis von etwa 1,24:1 - ein kaum sichtbares Grau auf Weiß. Der Decoder ist nicht die Grenze. Papier, das 85 % statt 100 % reflektiert, auslaufende Farbe, Blendlicht, das die Schwärzen anhebt, und ein halber Millimeter Bewegungsunschärfe sind die Grenze, und deshalb lauten die Arbeitswerte 4:1 am Bildschirm und 7:1 im Druck.

Die wichtigsten Punkte

  • Weder Apple noch Google veröffentlicht einen Kontrastschwellenwert für das in iOS und Android eingebaute QR-Scannen, also ist eine einzelne Zahl, die als „die“ Grenze von iPhone oder Android zitiert wird, keine Messung, die irgendjemand nachprüfen kann. Nachprüfbar sind der veröffentlichte Quelltext von ZXing, dem Open-Source-Decoder, und die Druckqualitätsnorm ISO/IEC 15415.
  • ZXings hybrider Binarisierer arbeitet auf Blöcken von 8 x 8 Pixeln und behandelt einen Block, dessen hellstes und dunkelstes Pixel höchstens 24 von 255 Stufen auseinanderliegen, als enthielte er keine Kante. Gegen Weiß sind 24 Stufen das Grau #E7E7E7 - ein Kontrastverhältnis von etwa 1,24:1.
  • Gestalte mit 4:1 für den Bildschirm und 7:1 für den Druck, und behandle 3:1 als die Linie, unter der ein Code nicht in Produktion gehen sollte. Der Abstand zwischen 1,24:1 und 7:1 ist kein Aberglaube: Es sind das Papier, das Umgebungslicht, das Blendlicht und die Unschärfe, die vom Gestaltungswert abgezogen werden, bevor der Decoder überhaupt etwas sieht.
  • Ein Kontrastverhältnis ist nicht das, was eine Kamera misst. Das Verhältnis gewichtet Grün mit 71 % der wahrgenommenen Helligkeit und addiert einen Streulichtterm; der Luminanzkanal einer Kamera gewichtet Grün mit 59 % und addiert nichts. Am stärksten weichen die beiden bei gesättigtem Rot, Grün und Blau voneinander ab, und das Verhältnis ist das strengere der beiden.
  • Unschärfe und wenig Kontrast multiplizieren sich, statt sich zu addieren, denn Unschärfe mittelt benachbarte Pixel und verringert damit die Spanne zwischen hellstem und dunkelstem Pixel in jedem Block - genau die Größe, an der der Binarisierer seine Schwelle ansetzt. Ein Code, der 3:1 auf einem Standfoto übersteht, versagt bei 3:1 in einer bewegten Hand.

Niemand veröffentlicht die Zahl, und genau da fängt es an

Es gibt keinen veröffentlichten Kontrastschwellenwert für das QR-Code-Scannen, das in iPhone- und Android-Kameras eingebaut ist. Apples Barcode-Erkennung sitzt im Vision-Framework, Androids in den Google Play Services, beide geschlossen, beide an diesem Punkt undokumentiert, und keine von beiden hat je ein Minimum genannt. Jeder Artikel, der eines nennt - 3:1, 4:1, 40 % -, zitiert entweder eine Gestaltungsrichtlinie, die für etwas anderes geschrieben wurde, oder gar nichts.

Das sollte man klar aussprechen, statt darum herumzuarbeiten, denn die Form der ehrlichen Antwort folgt daraus. Drei Dinge lassen sich ohne eigenes Labor feststellen: was ein Open-Source-Decoder tut, weil sein Quelltext veröffentlicht ist; was die Druckqualitätsnorm misst, weil sie eine veröffentlichte Norm ist; und was ein bestimmter Code auf einem bestimmten Handy tut, weil das zwanzig Minuten und einen Drucker braucht. Alles andere zu diesem Thema ist der Eindruck von irgendjemandem.

Die Frage wird deshalb immer wieder gestellt, weil der Kontrast die eine Variable eines QR-Codes ist, die man ungewollt festlegt. Die Modulgröße ist eine bewusste Entscheidung. Die Fehlerkorrektur ist eine bewusste Entscheidung. Die Farbe wird für eine Markenpalette gewählt, drei Jahre bevor überhaupt jemand an einen QR-Code denkt, und der Code erbt sie. Die praktische Frage lautet also nicht „was ist das Minimum“, sondern „wie viel Reserve lässt mir diese Palette“ - und darauf gibt es eine Antwort.

Was ein Decoder tatsächlich misst, ist eine lokale Differenz

Ein Decoder vergleicht nie deine Vordergrundfarbe mit deiner Hintergrundfarbe. Er wandelt das Kamerabild in einen einzelnen Graukanal um, entscheidet für jede kleine Pixelnachbarschaft, wo in dieser Nachbarschaft die Grenze zwischen Dunkel und Hell liegt, und liest daraus die Module ab. Die Binarisierung ist der Schritt, in dem ein Decoder eine graue Fotografie in reine schwarze und weiße Pixel verwandelt, bevor er überhaupt versucht, Module zu lesen. Alles, was mit Kontrasttoleranz zu tun hat, wird dort entschieden.

ZXing ist der Decoder, den zu lesen sich lohnt, denn er ist der einzige weit verbreitete, dessen Quelltext öffentlich ist. Sein voreingestellter hybrider Binarisierer teilt das Bild in Blöcke von 8 x 8 Pixeln, bestimmt in jedem Block das hellste und das dunkelste Pixel und legt die Schwelle dieses Blocks genau dazwischen. Unterhalb einer Bildkantenlänge von 40 Pixeln gibt er den lokalen Ansatz auf und setzt die Schwelle für das ganze Bild auf einmal.

Die interessante Konstante ist die Absicherung in dieser Blockschleife. Ist die Differenz zwischen hellstem und dunkelstem Pixel eines Blocks 24 oder kleiner, von 255, berechnet ZXing daraus keine Schwelle - er nimmt an, dass der Block nur helle oder nur dunkle Pixel enthält, und übernimmt eine Schätzung von den Nachbarn. Vierundzwanzig Stufen unter Weiß ist das Grau #E7E7E7, also ein Kontrastverhältnis von etwa 1,24:1. In einem sauberen Digitalbild mit großzügiger Modulgröße ist das die Untergrenze.

Daraus folgen zwei Dinge, und beide sind nützlicher als die Zahl selbst. Erstens wird der Kontrast lokal gemessen, ungefähr über die Fläche einiger weniger Module und nicht über die ganze Seite - weshalb ein langsamer Verlauf hinter einem Code weit weniger gefährlich ist, als er aussieht, und weshalb eine Fotografie hinter einem Code tödlich ist. Ein Verlauf lässt die lokale Differenz überall intakt; eine Fotografie kippt auf halbem Weg durch das Symbol, auf welcher Seite der Grenze ein Modul landet.

Zweitens sind Kontrast und Größe dasselbe Problem in anderer Kleidung. Die Blöcke sind acht mal acht Kamerapixel und nicht acht mal acht Module, wie viele Module also in einen Block fallen, hängt vollständig davon ab, wie groß das Symbol auf dem Sensor landet. Ein Code, der das Bild füllt, bekommt mehrere Blöcke pro Modul und eine Schwelle, die aus den Kanten dieses Moduls selbst berechnet ist. Ein Code, der aus zu großer Entfernung aufgenommen wird, bekommt einen Block, der mehrere Module überspannt, und eine über alle gemittelte Schwelle, also aus exakt derselben Grafik eine kleinere effektive Differenz. Einen Code für seine Scandistanz zu dimensionieren gehört deshalb zum Kontrastbudget und ist kein eigenes Thema.

Die Zahl im Entwurf und die Zahl, die bei der Kamera ankommt, sind verschieden

Alles zwischen der Entwurfsdatei und dem Bildsensor zieht Kontrast ab, und die Verluste summieren sich, statt sich auszugleichen. Genau deshalb liegen die empfohlenen Werte sechsmal über der Untergrenze des Decoders, und es lohnt sich, sie einzeln aufzuzählen statt zusammenzufassen, denn die meisten Punkte sind behebbar und die Behebung ist billig.

  • Das Papier ist nicht weiß. Ungestrichenes Büro- und Offsetpapier reflektiert grob 80 bis 90 % des auftreffenden Lichts. Ein Gestaltungsverhältnis von 21:1 kommt nicht als 21:1 an; es kommt als das an, was das Papier zulässt, bevor ein einziger Tropfen Farbe liegt.
  • Farbe läuft aus. Dunkle Module wachsen auf saugendem Papier in die hellen Zellen daneben, was in jedem Block, den der Decoder misst, den dunkelsten Wert anhebt und den hellsten senkt. Kraftpapier, Zeitungspapier und Thermobonpapier sind die schlimmsten Fälle.
  • Glanz und Laminat fügen beiden Licht hinzu. Spiegelnde Reflexion bringt dieselbe Menge weißes Licht in die dunklen wie in die hellen Module, was den Schwarzwert anhebt und das Verhältnis staucht - dieselbe Rechnung wie der Streulichtterm in der Kontrastformel. Ein mattes Laminat kostet ein wenig Schärfe und holt mehr Kontrast zurück, als es kostet.
  • Umgebungslicht tut dasselbe. Ein Code hinter einem Schaufenster im Tageslicht hat Schleierlicht über sich. Ein Code in einem dunklen Restaurant hat eine Kamera vor sich, die ihre Sensorverstärkung hochfährt, was genau der Größe Rauschen hinzufügt, die der Binarisierer misst.
  • Die Belichtungsautomatik richtet sich nach dem Bild, nicht nach dem Code. Ein dunkler Code auf einem kleinen hellen Etikett in einem überwiegend dunklen Foto wird auf den dunklen Teil belichtet, und das Etikett läuft Richtung Weiß, wobei es die Module mit hochzieht.
  • Unschärfe ist der Multiplikator. Fokusfehler und Handbewegung mitteln jedes Pixel mit seinen Nachbarn, und Mitteln ist genau das, was die Spanne zwischen hellstem und dunkelstem Pixel in einem 8-x-8-Block verringert. Wenig Kontrast und leichte Unschärfe addieren sich nicht, sie multiplizieren sich - deshalb besteht ein grenzwertiger Code, wenn jemand das Handy abstützt, und versagt, wenn nicht.

Bildschirme haben ihre eigene Fassung derselben Liste, was diejenigen überrascht, die eine Anzeige für eine kontrollierte Umgebung halten. Ein Handy mit 20 % Helligkeit im Sonnenlicht, hinter einer matten Schutzfolie, das einen Code in einem Browser zeigt, der einen Dunkelmodus-Filter darübergelegt hat, liefert nicht das Verhältnis, das in der Entwurfsdatei steht. Das Gestaltungsverhältnis ist die Obergrenze des Erreichbaren, nie der Wert, der ankommt.

Die Antwort auf „wie viel Kontrast brauchen Handys“ lautet also: Handys brauchen sehr wenig und Arbeitsabläufe brauchen sehr viel. Die Reserve, die du einplanst, ist keine Reserve gegen den Decoder. Sie ist Reserve gegen die acht Dinge oben, von denen keines auf dem Monitor sichtbar ist, an dem die Entscheidung fällt.

Die Kontrastleiter: ein Test, der deine eigene Zahl liefert

Die Kontrastuntergrenze für eine bestimmte Aufgabe findest du, indem du denselben Code in acht absteigenden Kontraststufen auf dem echten Material druckst und notierst, wo er aufhört zu funktionieren. Das dauert etwa zwanzig Minuten, kostet ein Blatt Papier und liefert eine Zahl für deinen Drucker, dein Material und die Handys deiner Kunden statt für die von jemand anderem.

Die acht Sprossen unten sind Grautöne auf Weiß, so gewählt, dass jede auf einem runden Kontrastverhältnis landet. Erzeuge dieselben Nutzdaten achtmal, einmal pro Vordergrundfarbe, halte den Hintergrund rein weiß, halte Modulform und -größe über alle acht identisch und ordne sie in der angegebenen Reihenfolge auf einem Blatt an.

Vordergrund auf WeißKontrastverhältnisLuminanzdifferenz (von 255)Reflexionsdifferenz
#00000021:1255100 %
#5959597,0:116690 %
#7F7F7F4,0:112879 %
#9494943,0:110770 %
#A3A3A32,5:19263 %
#B7B7B72,0:17253 %
#D2D2D21,5:14536 %
#E7E7E71,24:12420 %
Drei Spalten, drei Maße, in jeder Zeile ein Farbpaar - und genau deshalb hat „welcher Kontrast versagt“ keine einzige Antwort. Das Verhältnis ist der Wahrnehmungswert, den ein Designwerkzeug meldet, die Luminanzdifferenz ist ungefähr das, was im Graukanal einer Kamera ankommt, und die Reflexionsdifferenz ist das, was ein Barcode-Prüfgerät benotet. Alle drei sind aus den Hex-Werten berechnet, lassen sich also mit einem Taschenrechner nachvollziehen.
  1. Druck die acht Sprossen in Endgröße auf dem finalen Material. Ein Blatt, alle acht Codes in der Größe, die der echte Code haben wird, auf dem Material, das der echte Auftrag nutzt. Ein Bürolaserdruck auf Kopierpapier ist nicht der Test, wenn der Auftrag auf Kraftpapier, ein Flaschenetikett oder eine Speisekarte geht - das Auslaufen der Farbe hängt vom Material ab und wird vom selben Budget abgezogen wie die Farbe.
  2. Scanne jede Sprosse mit zwei Handys, nur mit der nativen Kamera. Je ein iOS- und ein Android-Gerät, mit der eingebauten Kamera-App statt mit einer Scan-App. Eigene Scan-Apps sind toleranter als die nativen und bestehen Sprossen, die deine Kunden nicht schaffen. Notiere die erste Sprosse, die auf einem der beiden Handys versagt.
  3. Wiederhole das unter dem Licht, in dem der Code leben wird. Trag dasselbe Blatt an den echten Ort - an den Restauranttisch, ins Ladenregal, an das Außenschild in der Dämmerung. Die Beleuchtung verschiebt den Ausfallpunkt um mehr Sprossen als jede andere einzelne Variable, und das ist der Schritt, der ausgelassen wird.
  4. Wiederhole das in der echten Distanz und in einem echten Winkel. Scanne von dort, wo ein Mensch tatsächlich steht, und einmal aus etwa 30 Grad schräg. Distanz verringert die Pixel pro Modul, was die Differenz schrumpfen lässt, die jeder Block sieht; der Winkel kostet noch ein wenig mehr davon.
  5. Wiederhole das, ohne das Handy abzustützen. Halt es so nachlässig wie üblich, einhändig, in Bewegung. Unschärfe verringert die Spanne zwischen hellstem und dunkelstem Pixel in jedem Block, dieser Durchgang wird also meist eine Sprosse früher versagen als der sorgfältige. Die nachlässige Zahl ist die echte Zahl.
  6. Gestalte zwei Sprossen über dem ersten Ausfall. Nimm das schlechteste Ergebnis über alle Bedingungen hinweg und geh davon zwei Sprossen die Leiter hinauf. Zwei Sprossen sind die Arbeitsreserve für die Variablen, die der Test nicht abdecken konnte - ein anderes Handy, ein kälterer Tag, ein abgenutzter Druckkopf, ein Laminat, das das Muster nicht hatte.

Eine Sprosse verdient eine Anmerkung. Die Zeile #000000 ist eine Kontrolle und kein Test: Versagt Schwarz auf Weiß auf diesem Blatt, liegt das Problem bei Größe, Fokus, Blendlicht oder Ruhezone, und nichts weiter unten auf der Leiter sagt dir irgendetwas, bevor das behoben ist.

Farbe ist nicht Kontrast, und die beiden Maße widersprechen sich

Das Kontrastverhältnis einer Farbe sagt schlecht voraus, wie sich die Farbe vor der Kamera verhält, denn die beiden Zahlen sind unterschiedlich gebaut. Ein Kontrastverhältnis ist eine einzelne Zahl, die die relative Leuchtdichte zweier Farben vergleicht und von 1:1 bei zwei identischen Farben bis 21:1 bei Schwarz gegen Weiß reicht. Es gewichtet Grün mit 71 % der wahrgenommenen Helligkeit, wendet eine Gammakurve an und addiert einen kleinen Streulichtterm, der dunkle Paare absichtlich bestraft. Der Graukanal einer Kamera gewichtet Grün mit 59 %, Rot mit 30 % und Blau mit 11 % und addiert nichts.

Farbe auf WeißKontrastverhältnisLuminanzdifferenz (von 255)
Schwarz #00000021:1255
Tiefes Marineblau #0F172A17,9:1232
Dunkelrot #7F1D1D10:1197
Reines Blau #0000FF8,6:1226
Markenblau #1D4ED86,7:1176
Webgrün #0080005,1:1180
Rot #DC26264,8:1163
Reines Rot #FF00004,0:1179
Grün #16A34A3,3:1144
Magenta #FF00FF3,1:1150
Orange #FF7F002,5:1104
Bernstein #F59E0B2,2:188
Reines Grün #00FF001,4:1105
Cyan #00FFFF1,25:176
Gelb #FFFF001,07:129
Die Kontrastverhältnisse nutzen die WCAG-Formel für die relative Leuchtdichte; die Luminanzdifferenzen nutzen die BT.601-Gewichtung, auf der der Graukanal einer Kamera beruht. Beide Spalten sind aus den Hex-Werten in der ersten Spalte berechnet.

Reines Blau ist der Ausreißer und der nützliche Fund in der Tabelle. Mit 8,6:1 und einer Luminanzdifferenz von 226 liegt es in beiden Maßen direkt hinter Fast-Schwarz, was tiefes Blau mit großem Abstand zur sichersten gesättigten Farbe für einen QR-Code macht. Dunkle Rot- und Pflaumentöne folgen darauf. Jede Farbe, deren Verhältnis daher rührt, dass sie dunkel und nicht dass sie gesättigt ist, verhält sich gut. Welche Paletten das übrig lässt und wohin sie gehören, ist das Thema von farbigen QR-Codes.

Bei reinem Grün gehen die beiden Maße am weitesten auseinander, und dort lohnt es sich trotzdem, dem Verhältnis zu trauen. Sein Verhältnis von 1,4:1 sieht katastrophal aus, während seine Luminanzdifferenz von 105 der 104 von Orange entspricht, die Kamera sieht in einem grünen Code also mehr, als das Verhältnis nahelegt. Es reicht trotzdem nicht: 105 von 255 ist unter halber Skala, bevor Papier, Licht und Objektiv ihren Anteil nehmen, und grüne Codes sind die, die im Mockup zuverlässig funktionieren und im Regal versagen.

Gelb, Cyan und Bernstein versagen in beiden Maßen, und es gibt keine Technik, die sie rettet. Gelb auf Weiß gibt der Kamera eine Differenz von 29 Stufen von 255 - kaum über den 24, bei denen ZXing gar nicht mehr nach einer Kante sucht. Ein gelber Code ist kein riskanter Code, er ist ein Dekorationsobjekt, das unter perfekten Bedingungen gelegentlich scannt.

Die Lösung, wenn eine Markenfarbe das Ziel nicht erreicht, ist immer dieselbe und geht immer in eine Richtung: Mach den Code dunkler, nicht den Hintergrund heller. Hintergründe müssen nahe an Weiß bleiben, damit die Reflexionsdifferenz den Druck übersteht, und eine Markenfarbe, die man zwei oder drei Stufen dunkler nimmt, behält meist ihre Identität und verdoppelt dabei ihr Verhältnis. Wo das nicht akzeptabel ist, setz die Markenfarbe in den Rahmen, das Label und den Handlungsaufruf rund um den Code und lass den Code selbst dunkel - gebrandete QR-Codes sind größtenteils genau das, und es kostet überhaupt keinen Kontrast.

Helle Module auf dunklem Hintergrund sind ein eigenes Problem

Ein invertierter QR-Code - helle Module auf dunklem Hintergrund - kann ein perfektes Kontrastverhältnis haben und trotzdem versagen, denn das Verhältnis ist symmetrisch und der Decoder ist es nicht. Weiß auf Schwarz rechnet sich zu denselben 21:1 wie Schwarz auf Weiß, und keine Kontrastprüfung irgendwo wird das monieren. Unterschiedlich ist nur, ob die Software am anderen Ende bereit ist, das Bild auch andersherum zu probieren.

Aktuelle Kamera-Apps von iPhone und Android kommen mit invertierten Codes im Allgemeinen zurecht, und das hat sich stetig verbessert. Ältere Hardware ist die Stelle, an der es bricht: Feste Imager, Kassenscanner und Lagertechnik erwarten häufig dunkle Daten auf hellem Grund und haben keinen Invertierungsdurchgang, und ZXing selbst invertiert nur, wenn die aufrufende Anwendung das Bild in die invertierte Luminanzquelle verpackt, die er dafür anbietet - eine Entscheidung dessen, der die App gebaut hat, und nicht des Codes.

Die praktische Regel: Invertierung ist eine Wette auf das Lesegerät und keine Eigenschaft des Codes. Für ein Plakat, einen Bildschirm oder einen Social-Media-Post, die von Handys gelesen werden, ist ein invertierter Code eine vertretbare Gestaltungsentscheidung. Für alles, was ein Kunde mit unbekannter Technik scannen könnte, oder alles, was an einer Kasse gelesen wird, ist es ein Münzwurf aus ästhetischen Gründen - und die sichere Fassung, ein dunkler Code in einem hellen Feld auf dem dunklen Hintergrund, kostet ein Rechteck.

Es gibt noch eine Asymmetrie, die es zu benennen lohnt, weil sie am Bildschirm unsichtbar ist. Einen hellen Code auf dunklem Hintergrund zu drucken heißt, eine große dunkle Vollfläche anzulegen, und Vollflächen laufen stärker aus als spärliche Deckung. Die hellen Module sind die, die schrumpfen, und sie sind die, die der Decoder als helle Hälfte des Paares liest. Ein invertierter Code verliert im Druck deshalb mehr Kontrast als derselbe Code richtig herum.

Was die Drucknorm statt eines Verhältnisses misst

Die QR-Code-Welt hat ihr eigenes Kontrastmaß, und es ist kein Verhältnis. Der Symbolkontrast ist das von ISO/IEC 15415 definierte Druckqualitätsmaß für die Differenz des Reflexionsgrades zwischen dem hellsten und dem dunkelsten Punkt eines Symbols. Er wird in Prozentpunkten angegeben und von A bis F benotet. Ein Prüfgerät meldet ihn neben Modulation, Schäden am festen Muster, Rasterungleichmäßigkeit und ungenutzter Fehlerkorrektur, und die Gesamtnote des Symbols ist die schlechteste davon.

Der Unterschied ist wichtig, weil eine Reflexionsdifferenz und ein Kontrastverhältnis nicht ineinander umrechenbare Eindrücke derselben Sache sind. Der Reflexionsgrad ist lineares Licht; ein Kontrastverhältnis legt eine Gammakurve und einen Streulichtterm darüber. Rechnet man es durch, ist die Abweichung groß: Eine Reflexionsdifferenz von 40 %, das in Einzelhandelsspezifikationen übliche Niveau, entspricht gegen ideales Weiß einem Kontrastverhältnis von etwa 1,6:1, und eine Differenz von 70 % etwa 3:1. Ein Farbpaar, das ein Prüfwerkzeug für Web-Barrierefreiheit rundheraus ablehnt, kann ein vollkommen normkonformer Barcode sein.

Das ist kein Freibrief, mit 3:1 zu gestalten. Es ist eine Erklärung dafür, warum die beiden Branchen sich widersprechen: Ein Prüfgerät misst ein gedrucktes Muster unter kontrolliertem Licht in festem Abstand, wobei das Symbol die Blende füllt, und das Verhältnis eines Gestalters muss ein Handy in einer Hosentasche überstehen. Die Norm misst das Artefakt, und das Verhältnis wird als Stellvertreter für die gesamte Kette benutzt.

Die Falle in der Norm ist das Licht, das sie benutzt. Die Barcode-Prüfung erfolgt unter rotem Licht bei 660 Nanometern, der Wellenlänge der ursprünglichen Laserscanner, die moderne Prüfgeräte weiterhin nachbilden; die Note eines Symbols wird zusammen mit ihr angegeben, etwa als 4.0/20/660. Rote Farbe reflektiert rotes Licht, ein roter Code auf weißem Papier hat bei 660 nm also fast keinen Kontrast und wird als unlesbar benotet, während er auf jedem Handy einwandfrei scannt. Das ist der konkrete Grund, warum ein roter QR-Code jede Prüfung eines Gestalters bestehen und an einer Kasse oder an einem Lagerimager versagen kann.

Die Regel, die daraus folgt: Alles, was von fester Technik statt von Kunden gelesen wird, sollte schwarz auf weiß sein, in der Größe, die die Dokumentation dieser Technik verlangt, und geprüft statt begutachtet. Alles, was von Handys gelesen wird, hat den gesamten Farbraum zur Verfügung, abzüglich der Teile, die die Tabelle oben ausschließt.

Die Zahlen, auf die du gestalten solltest

Ziele auf ein Kontrastverhältnis von mindestens 7:1 für alles Gedruckte, mindestens 4:1 für alles auf einem Bildschirm, und behandle 3:1 als den Punkt, unter dem ein Code nicht in Produktion gehen sollte, egal wie gut er im Mockup aussieht. Das sind Gestaltungsziele, in denen die Verluste der vorherigen Abschnitte bereits eingepreist sind, und keine Schwellen, die jemand an einem Handy gemessen hätte.

  • Druck unter unkontrollierten Bedingungen - Speisekarten, Verpackung, Beschilderung, Aufkleber. 7:1 oder besser. Schwarz oder Fast-Schwarz auf Weiß sind 21:1 und kosten nichts; der Abstand zwischen 21:1 und 7:1 ist der Platz, in den eine Markenfarbe passt.
  • Druck auf saugendem oder schwierigem Material - Kraftpapier, Zeitungspapier, Bons, Stoff, gravierte Oberflächen. Gib überhaupt keinen Kontrast aus. Schwarz auf dem hellsten verfügbaren Untergrund, und steck das Budget stattdessen in die Modulgröße.
  • Bildschirme - Websites, Präsentationen, App-Oberflächen, Video. 4:1 oder besser, in dem Bewusstsein, dass Helligkeit und Umgebungslicht beim Betrachter außerhalb deiner Kontrolle liegen.
  • Alles, was von festen Scannern gelesen wird oder einer Spezifikation unterliegt. Schwarz auf Weiß, geprüft. Farbe ist hier ein Risiko ohne Gegenwert, und Rot ist ein Risiko mit einem konkreten Fehlerbild.
  • Unter 3:1. Bring ihn nicht in Produktion. Das ist kein grenzwertiger Code, den manche Handys schon schaffen - das ist ein Code, dessen gesamte Reserve verbraucht ist, bevor das Papier gewählt wurde.

Eine Prüfung, die leicht vergessen wird: Die drei Eckmarkierungen zählen mit. Ein Scanner lokalisiert einen QR-Code über seine Suchmuster, bevor er irgendetwas decodiert, ein Code mit dunklen Modulen und Ecken in einer blassen Akzentfarbe hat seinen schwächsten Kontrast also genau dort, wo der Ausfall nicht wiederherstellbar ist. Egal welches Werkzeug du nutzt, bewerte die Eckfarbe getrennt gegen den Hintergrund und nimm den schlechteren der beiden Werte als den echten Kontrast des Codes.

KoloQR, ein kostenloser QR-Code-Generator mit runden und individuell geformten QR-Codes, berechnet dieses Paar automatisch: Das Abzeichen neben der Vorschau meldet das Kontrastverhältnis für die Musterfarbe und für die Eckenfarbe gegen den Hintergrund, zeigt den jeweils schlechteren an und besteht bei 4:1. Einen transparenten Hintergrund bewertet es als Weiß, denn dort landet ein transparenter Code üblicherweise. Du kannst die Leiter im Generator aufbauen, indem du dieselben Nutzdaten in jedem der acht Grautöne oben exportierst und das Blatt druckst.

Die ehrliche Grenze von allem hier: Keine dieser Zahlen garantiert einen Scan auf Hardware, die wir nicht getestet haben, und wir haben bewusst keinen Wert für ein bestimmtes Handy veröffentlicht, weil wir keinen gemessen haben. Die Leiter gibt es, damit du es kannst. Zwanzig Minuten und ein Blatt Papier liefern eine Zahl, die für deine Aufgabe stimmt - und die ist mehr wert als jede Zahl in diesem Beitrag.

Wenn der Kontrast gar nicht das Problem ist

Die meisten QR-Codes, denen man den Kontrast vorwirft, versagen aus einem von vier anderen Gründen, und den Kontrast zu erhöhen ändert bei keinem davon etwas. Diese Liste zuerst durchzugehen ist schneller, als die Leiter zu drucken, denn drei der vier sind ohne Handy sichtbar.

  • Der Code ist zu klein für die Distanz. Unter grob 0,4 mm pro Modul im Druck tun sich Handykameras schwer, egal welche Farben im Spiel sind. Miss ein Modul, bevor du irgendetwas anderes anpasst.
  • Die Ruhezone wurde beschnitten. ISO/IEC 18004 schreibt einen freien Rand von vier Modulen um das Symbol vor, und dass ein Gestalter sich diesen Platz fürs Layout zurückholt, ist eine der häufigsten Ursachen für einen Code, der wunderschön aussieht und nie decodiert.
  • Das Bild wurde irgendwo im Ablauf als JPEG gespeichert. Die JPEG-Kompression legt schwache Ringe um jedes Modul, was die lokale Differenz genau in den Blöcken senkt, die der Binarisierer misst. Es sieht aus wie ein Kontrastproblem und ist ein Dateiformatproblem.
  • Blendlicht. Ein Glanzlaminat oder ein Bildschirm, der eine Deckenleuchte spiegelt, verringert den Gestaltungskontrast überhaupt nicht - es legt einen hellen Fleck über einen Teil des Symbols, und die Blöcke unter diesem Fleck verlieren ihre Differenz, während der Rest des Codes in Ordnung ist. Das Handy zu kippen behebt es, und das ist das Erkennungsmerkmal.

Die Fehlerkorrektur gehört auch auf diese Liste, im negativen Sinn. Die Stufe von M auf H anzuheben hilft einem kontrastarmen Code nicht, denn die Fehlerkorrektur repariert Module, die der Decoder falsch gelesen hat, und wenig Kontrast hindert den Decoder daran, das Symbol überhaupt zu lesen. Die Abwägung zwischen Wiederherstellungskapazität und Modulgröße ist eine echte Entscheidung, und sie ist nicht der Hebel für dieses Problem. Der Hebel für dieses Problem ist ein dunklerer Vordergrund, ein hellerer Hintergrund oder ein größerer Code.

Das verwandte Fehlerbild, das man kennen sollte, da Dekoration und Kontrast aus demselben Budget bezahlt werden: Dekorative Modulformen färben weniger von jeder Zelle ein als quadratische Module und verringern damit die lokale Differenz, die der Binarisierer misst, auf dieselbe Weise wie wenig Kontrast. Was eine individuelle QR-Code-Form wirklich kostet rechnet das durch, und die beiden Effekte stapeln sich - ein gestalteter Code in einer blassen Markenfarbe gibt zweimal aus demselben Budget aus.

Erstelle deinen QR-Code

Kostenlos, ohne Konto und ohne Wasserzeichen. Wähle eine Form, füge ein Logo hinzu, prüfe den Kontrast und exportiere SVG, PDF, EPS oder PNG - ein statischer Code ohne Abo dahinter.

QR-Code erstellen

Questions? Answered

Als Gestaltungsziel 7:1 für den Druck und 4:1 für Bildschirme, mit 3:1 als der Linie, unter der ein Code nicht in Produktion gehen sollte. Die Untergrenze des Decoders selbst liegt weit darunter - ZXing erkennt keine Kante mehr, wenn hellstes und dunkelstes Pixel eines Blocks um 24 von 255 auseinanderliegen, also etwa 1,24:1 -, aber diese Untergrenze gilt für ein sauberes Digitalbild und nicht für Farbe auf Papier unter Ladenbeleuchtung.

Weder Apple noch Google veröffentlicht einen Schwellenwert, jede konkrete Zahl, die zitiert wird, ist also keine Messung, die irgendjemand nachprüfen kann. Beide Decoder sind Closed Source. Der einzige lesbare Bezugspunkt ist ZXing, der bei einem sauberen Bild bei etwa 1,24:1 aufgibt, und die praktische Antwort für eine echte Aufgabe lautet: Druck eine Leiter absteigender Kontraststufen und finde heraus, wo deine eigene Kombination aus Material, Licht und Handys versagt.

Weil ein Bildschirm den Gestaltungskontrast liefert und Papier nicht. Weißes Papier reflektiert 80 bis 90 % statt 100 %, Farbe läuft in die hellen Zellen neben jedem dunklen Modul, und Glanz oder Umgebungslicht legen einen hellen Schleier über beide. Ein Paar, das sich in der Entwurfsdatei zu 3:1 rechnet, kann bei der Kamera näher an 2:1 ankommen. Teste auf dem echten Material in Endgröße, nie am Monitor.

Meistens ja, wenn die Farbe dunkel und nicht bloß gesättigt ist. Tiefe Blautöne, Marineblau und dunkle Rottöne überschreiten alle 7:1 gegen Weiß und verhalten sich vor der Kamera gut. Orange-, Bernstein-, Cyan- und Gelbtöne nicht, und keine Fehlerkorrekturstufe rettet sie. Wenn eine Markenfarbe nicht reicht, mach den Code dunkler, statt den Hintergrund aufzuhellen - oder lass den Code dunkel und setz die Markenfarbe in den Rahmen darum.

Auf aktuellen Handys meistens. Auf älteren oder festen Scannern oft nicht. Ein Kontrastverhältnis ist symmetrisch, Weiß auf Schwarz rechnet sich also zu denselben 21:1 wie Schwarz auf Weiß, und keine Kontrastprüfung warnt dich - unterschiedlich ist nur, ob das Lesegerät das Bild invertiert probiert. Invertierte Codes verlieren im Druck außerdem mehr Kontrast, weil dunkle Vollflächen in die hellen Module auslaufen. Nutze sie dort, wo Handys das einzige Lesegerät sind.

Ein Verlauf übersteht es meistens und eine Fotografie meistens nicht, und der Grund ist, dass Decoder lokal binarisieren. ZXing berechnet für jeden Block von 8 x 8 Pixeln eine eigene Hell-Dunkel-Grenze, ein Hintergrund, der sich langsam ändert, hält die lokale Differenz also überall intakt. Eine Fotografie ändert sich schneller als der Code, also landen die Module irgendwo im Symbol auf der falschen Seite der Schwelle ihres eigenen Blocks.

Weil Barcode-Prüfgeräte und viele feste Scanner unter rotem Licht bei 660 Nanometern lesen und rote Farbe rotes Licht reflektiert. Ein roter Code auf weißem Papier hat bei dieser Wellenlänge fast keinen Kontrast, obwohl eine Farbkamera ihn klar sieht. Das ist eine bekannte Falle aus der Welt der 1D-Barcodes und gilt unverändert für QR-Codes. Alles, was von fester Technik gescannt wird, sollte schwarz auf weiß sein.

Nicht auf Weiß. Gelb auf Weiß gibt einer Kamera eine Luminanzdifferenz von 29 Stufen von 255, kaum über den 24, bei denen ZXing gar nicht mehr nach einer Kante sucht, und ein Kontrastverhältnis von 1,07:1. Pastelltöne liegen nur wenig besser. Wenn eine blasse Palette Vorgabe ist, dreh das Problem um: Ein dunkler Code in einem blassen Feld erhält die Palette und erhält den Kontrast.

Nein, und das ist die häufigste falsche Lösung. Die Fehlerkorrektur repariert Module, die falsch gelesen wurden; wenig Kontrast verhindert, dass das Symbol überhaupt gelesen wird, denn die Binarisierung passiert, bevor es Daten zum Reparieren gibt. Die Stufe von M auf H anzuheben macht das Symbol bei gleicher Druckbreite außerdem dichter, was jedes Modul verkleinert und einen grenzwertigen Code schlechter statt besser macht.

Mehr, in dem Sinn, dass ein Ausfall dort nicht wiederherstellbar ist. Ein Scanner lokalisiert einen QR-Code über seine drei Eckmarkierungen, bevor er irgendetwas decodiert, blasse Ecken auf einem dunklen Code legen den schwächsten Kontrast also genau dorthin, wo die Fehlerkorrektur nicht hinreicht. Bewerte die Eckfarbe getrennt gegen den Hintergrund und behandle den schlechteren der beiden Werte als den echten Kontrast des Codes.

Warum KoloQR?

  • Erstelle QR-Codes für Websites, Speisekarten, Wi-Fi, PDFs und Visitenkarten
  • Passe Farben, Logos und einzigartige Formen an
  • Lade hochwertige PNG- und SVG-Dateien herunter
  • Für Print und Digital gemacht
QR-Code erstellen
Ein einfacher schwarzer QR-Code neben demselben Code, umgestaltet als Kreis mit Markenfarben