BUNTI
BUNTI ist ein zweidimensionaler Farbcode, den eine Kamera lesen kann, und Teil von Wolly. Der Inhalt wird als Folge der DNA-Basen A, C, G und T dargestellt, zwei Bit je Zelle, in vier Farben: Grün für A, Blau für C, Gelb für G und Rot für T. Drei schwarz-weiße Suchmuster und ein Eckmuster zeigen der Kamera, wo der Code liegt. Aus den Suchmustern bestimmt der Scanner Größe und Lage des Codes. Das kleinere Eckmuster liefert den vierten Punkt, damit auch ein schräg fotografierter Code gelesen werden kann. Quelltext: github.com/heikozim/hilde-wolly; die Sprache: github.com/heikozim/hilde.
Warum vier Farben
BUNTI ist eine Hommage an die DNA: vier Basen, vier Farben. Die Wahl hat auch einen Nutzen: Vier Farben tragen zwei Bit je Zelle, doppelt so viel wie Schwarz-Weiß, und lassen sich relativ sicher unterscheiden. Mit 256 Farben wären es acht Bit, aber so viele Farben können beim Farbdruck oder bei ungünstigem Licht mehr Lesefehler erzeugen. BUNTI ersetzt keine Norm: Für den Austausch mit anderen gibt es QR-Code und JAB Code (Fraunhofer SIT im Auftrag des BSI, ISO/IEC 23634). Es ist für eigene, proprietäre Anwendungen gedacht.
Wie der Code geschützt ist
- Reed-Solomon über GF(256) in den Stufen L, M, Q und H, dazu eine CRC-32 über die Nutzdaten.
- Modus 2 für DNA: höchstens drei gleiche Basen hintereinander und ein GC-Anteil von 45 bis 55 Prozent.
- Ausgabe als Pixel, SVG oder PNG. Gelesen wird aus einem Bild mit Perspektivkorrektur (Wolly.BuntiScan), getestet an beschädigten und gedrehten Bildern. Mit einer echten Kamera wurden diese Codes noch nicht gelesen.
Drei Beispiele
Jedes Bild hat das Kommandozeilenprogramm buntipng aus Wolly aus dem danebenstehenden Text erzeugt, mit 8 Pixeln je Zelle und einem Rand von 4 Zellen. Das Bild wurde in eine Datei geschrieben, aus dieser Datei wieder eingelesen und dekodiert. Der gelesene Text stimmte jedes Mal mit dem Ausgangstext überein. Die Bilder stammen unverändert aus dem Demo-Verzeichnis von Wolly, wo auch ihre SHA-256-Prüfsummen stehen.

Der Text „Wolly“, 5 Byte, 21 × 21 Zellen.

Der Text „Wolly ist ein Web-Framework in Hilde: Formulare, Sitzungen, Bilder und dieser Farbcode, Bunti, den eine Kamera liest.“, 117 Byte, 33 × 33 Zellen.

Der folgende Text, 415 Byte, 53 × 53 Zellen.
Bunti ist ein zweidimensionaler Farbcode: vier Farben tragen je zwei Bit, drei Suchmuster und ein Eckmuster zeigen der Kamera die Lage, Reed-Solomon und eine CRC-32 sichern die Nutzlast. Dieser Text ist die Nutzlast dieses Bildes; das Programm hat das PNG geschrieben, aus der Datei wieder gelesen und entschluesselt, und der gelesene Text ist dieser Text. Wolly, ein Web-Framework in Hilde, Heiko Zimmermann, 2026.