Générateur de QR codes en Kotlin avec ZXing
\n\nLes QR codes (Quick Response) sont devenus une partie essentielle du monde numérique moderne. Ils sont utilisés pour échanger rapidement des liens, des coordonnées, des mots de passe Wi-Fi et d'autres informations. Si vous développez une application en Kotlin — que ce soit pour Android, une partie serveur (Ktor, Spring) ou un desktop (Compose Desktop) — vous pourriez avoir besoin d'intégrer une fonctionnalité de génération de QR codes. Dans cet article, nous allons voir comment créer un générateur de QR codes simple et efficace en Kotlin en utilisant la bibliothèque populaire ZXing (Zebra Crossing).
\n\nPourquoi ZXing ?
\nZXing est une bibliothèque polyvalente pour la lecture et l'écriture de codes-barres et de QR codes. Elle est écrite en Java, ce qui la rend parfaitement compatible avec Kotlin. Les principaux avantages :
\n- \n
- Prise en charge de divers formats : QR code, Data Matrix, Aztec, PDF417 et autres. \n
- Haute performance et personnalisation. \n
- Communauté active et mises à jour régulières. \n
- Simplicité d'intégration dans les projets Kotlin. \n
Ajout de la bibliothèque
\nPour commencer, ajoutez la dépendance dans votre fichier build.gradle.kts (si vous utilisez Gradle) :
dependencies {\n implementation("com.google.zxing:core:3.5.3")\n implementation("com.google.zxing:javase:3.5.3") // pour travailler avec BufferedImage\n}\nSi vous écrivez une application serveur avec Ktor ou Spring, ces dépendances conviennent. Pour Android, vous pouvez utiliser le module android-core, mais dans la plupart des cas, core suffit.
Générateur de QR code de base
\nCréons une classe QRCodeGenerator qui prendra un texte et retournera une image de QR code sous forme de BufferedImage.
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 // Configuration de l'encodage et du niveau de correction d'erreurs\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) // Marges autour du QR code\n }\n\n val writer = QRCodeWriter()\n val bitMatrix: BitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, width, height, hints)\n\n // Conversion de BitMatrix en 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}\nExplication :
\n- \n
QRCodeWriter— classe ZXing responsable de la création de la matrice de points. \n BitMatrix— matrice binaire oùtruesignifie un pixel noir. \n - Nous définissons l'encodage UTF-8 et le niveau maximum de correction d'erreurs (H — 30% de dommages). \n
- L'image est enregistrée au format ARGB avec une palette de couleurs noir et blanc. \n
Sauvegarde en fichier (PNG)
\nPour enregistrer le QR code généré dans un fichier, utilisez 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 enregistré : ${outputFile.ab Aussi dans la bibliothèque
Travailler avec Kafka en JavaScript (Node.js) : la bibliothèque node-rdkafka
Conan C++ : guide complet avec exemples pratiques
Validation des données en C++ : bibliothèques, modèles et exemples de code