QR-Code-Generator in Kotlin: Bibliothek ZXing und Implementierungstipps

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

QR-Code-Generator in Kotlin mit ZXing

\n\n

QR-Codes (Quick Response) sind zu einem festen Bestandteil der modernen digitalen Welt geworden. Sie werden für den schnellen Austausch von Links, Kontaktdaten, WLAN-Passwörtern und anderen Informationen verwendet. Wenn Sie eine Anwendung in Kotlin entwickeln – sei es für Android, das Backend (Ktor, Spring) oder den Desktop (Compose Desktop) – benötigen Sie möglicherweise die Funktionalität zur Generierung von QR-Codes. In diesem Artikel betrachten wir, wie Sie mit der beliebten Bibliothek ZXing (Zebra Crossing) einen einfachen und effizienten QR-Code-Generator in Kotlin erstellen.

\n\n

Warum ZXing?

\n

ZXing ist eine multifunktionale Bibliothek zum Lesen und Schreiben von Barcodes und QR-Codes. Sie ist in Java geschrieben, was sie ideal mit Kotlin kompatibel macht. Die Hauptvorteile sind:

\n
    \n
  • Unterstützung verschiedener Formate: QR-Code, Data Matrix, Aztec, PDF417 und andere.
  • \n
  • Hohe Leistung und Anpassbarkeit.
  • \n
  • Aktive Community und regelmäßige Updates.
  • \n
  • Einfache Integration in Kotlin-Projekte.
  • \n
\n\n

Einbinden der Bibliothek

\n

Fügen Sie zunächst die Abhängigkeit zu Ihrer build.gradle.kts hinzu (falls Sie Gradle verwenden):

\n
dependencies {\n    implementation("com.google.zxing:core:3.5.3")\n    implementation("com.google.zxing:javase:3.5.3") // für die Arbeit mit BufferedImage\n}
\n

Wenn Sie eine Serveranwendung mit Ktor oder Spring schreiben, sind diese Abhängigkeiten geeignet. Für Android können Sie das Modul android-core verwenden, aber in den meisten Fällen reicht core aus.

\n\n

Basis-Generator für QR-Codes

\n

Erstellen wir eine Klasse QRCodeGenerator, die einen Text entgegennimmt und ein Bild des QR-Codes als BufferedImage zurückgibt.

\n
import com.google.zxing.BarcodeFormat\nimport com.google.zxing.EncodeHintType\nimport com.google.zxing.qrcode.QRCodeWriter\nimport com.google.zxing.common.BitMatrix\nimport java.awt.image.BufferedImage\nimport java.util.*\n\nclass QRCodeGenerator {\n\n    fun generateQRCode(text: String, width: Int = 300, height: Int = 300): BufferedImage {\n        // Konfiguration der Kodierung und des Fehlerkorrekturlevels\n        val hints = EnumMap<EncodeHintType, Any>(EncodeHintType::class.java).apply {\n            put(EncodeHintType.CHARACTER_SET, "UTF-8")\n            put(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H) // High\n            put(EncodeHintType.MARGIN, 1) // Ränder um den QR-Code\n        }\n\n        val writer = QRCodeWriter()\n        val bitMatrix: BitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, width, height, hints)\n\n        // Umwandlung von BitMatrix in BufferedImage\n        val image = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)\n        for (x in 0 until width) {\n            for (y in 0 until height) {\n                image.setRGB(x, y, if (bitMatrix.get(x, y)) 0xFF000000.toInt() else 0xFFFFFFFF.toInt())\n            }\n        }\n        return image\n    }\n}
\n

Erklärung:

\n
    \n
  • QRCodeWriter – ZXing-Klasse, die für die Erstellung der Punktmatrix verantwortlich ist.
  • \n
  • BitMatrix – binäre Matrix, bei der true einen schwarzen Pixel bedeutet.
  • \n
  • Wir legen die Kodierung UTF-8 und das maximale Fehlerkorrekturlevel fest (H – 30% Beschädigung).
  • \n
  • Das Bild wird im ARGB-Format mit einem schwarz-weißen Farbschema gespeichert.
  • \n
\n\n

Speichern in eine Datei (PNG)

\n

Um den generierten QR-Code in eine Datei zu speichern, verwenden Sie javax.imageio.ImageIO:

\n
import java.io.File\nimport javax.imageio.ImageIO\n\nfun saveQRCodeToFile(text: String, filePath: String) {\n    val generator = QRCodeGenerator()\n    val image = generator.generateQRCode(text)\n    val outputFile = File(filePath)\n    ImageIO.write(image, "png", outputFile)\n    println("QR-Code gespeichert: ${outputFile.ab                    

Empfehlungen