QR-Code-Generator in Kotlin mit ZXing
\n\nQR-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\nWarum ZXing?
\nZXing 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
Einbinden der Bibliothek
\nFügen Sie zunächst die Abhängigkeit zu Ihrer build.gradle.kts hinzu (falls Sie Gradle verwenden):
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}\nWenn 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.
Basis-Generator für QR-Codes
\nErstellen wir eine Klasse QRCodeGenerator, die einen Text entgegennimmt und ein Bild des QR-Codes als BufferedImage zurückgibt.
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}\nErklärung:
\n- \n
QRCodeWriter– ZXing-Klasse, die für die Erstellung der Punktmatrix verantwortlich ist. \n BitMatrix– binäre Matrix, bei dertrueeinen 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
Speichern in eine Datei (PNG)
\nUm den generierten QR-Code in eine Datei zu speichern, verwenden Sie javax.imageio.ImageIO:
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 Auch in der Bibliothek
Internationalisierung (i18n) in TypeScript: die Bibliothek i18next
Event Bus und das Observer-Muster in Go (Golang): Implementierung und Beispiele
Caching in C# (.NET): Redis, MemoryCache und andere Lösungen
Kotlin Task Scheduler: Überblick und Anwendungsbeispiele