Créer un Générateur de Code QR en VB.NET (Open Source)
Dans ce guide, nous allons apprendre à créer un générateur de code QR en VB.NET à l’aide d’une bibliothèque open source. Les codes QR sont couramment utilisés pour encoder des informations telles que des URL, des textes, des contacts, etc. Nous utiliserons la bibliothèque ZXing.Net pour ce projet.
Étape 1 : Prérequis
- Environnement de développement :
- Installez Visual Studio ou un autre IDE compatible VB.NET.
- Bibliothèque ZXing.Net :
- ZXing.Net est une bibliothèque open source populaire pour générer et lire des codes QR.
- Ajoutez la bibliothèque via NuGet :
- Ouvrez Visual Studio.
- Cliquez sur Outils > Gestionnaire de package NuGet > Gérer les packages NuGet pour la solution.
- Recherchez ZXing.Net et installez-la dans votre projet.
Étape 2 : Structure du Projet
Créez une nouvelle application console ou Windows Forms en VB.NET selon vos préférences.
Exemple avec une Application Console
Code :
Imports ZXing
Imports ZXing.Common
Imports System.Drawing
Imports System.Drawing.Imaging
Module QRCodeGenerator
Sub Main()
Console.WriteLine("=== Générateur de Code QR ===")
' Saisir le texte à encoder
Console.Write("Entrez le texte ou l'URL à convertir en code QR : ")
Dim inputData As String = Console.ReadLine()
' Générer le code QR
Dim qrCodeImage As Bitmap = GenerateQRCode(inputData)
' Sauvegarder le code QR en tant qu'image
Dim outputPath As String = "QRCode.png"
qrCodeImage.Save(outputPath, ImageFormat.Png)
Console.WriteLine($"Code QR généré et enregistré sous : {outputPath}")
' Afficher un message de fin
Console.WriteLine("Appuyez sur Entrée pour fermer.")
Console.ReadLine()
End Sub
' Fonction pour générer un code QR
Public Function GenerateQRCode(input As String) As Bitmap
Try
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Height = 300,
.Width = 300,
.Margin = 1
}
' Générer le bitmap
Dim qrCodeBitmap As Bitmap = writer.Write(input)
Return qrCodeBitmap
Catch ex As Exception
Console.WriteLine($"Erreur lors de la génération du code QR : {ex.Message}")
Return Nothing
End Try
End Function
End Module
Fonctionnement :
- L’utilisateur entre un texte ou une URL.
- Le programme génère un code QR et le sauvegarde sous forme d’image dans le dossier de l’application.
- L’image générée s’appelle
QRCode.png
et peut être ouverte avec n’importe quel visualiseur d’images.
Étape 3 : Exemple avec une Application Windows Forms
Créez une interface graphique simple pour permettre aux utilisateurs de générer des codes QR facilement.
Interface suggérée :
- Un champ de texte (
TextBox
) pour saisir les données. - Un bouton (
Button
) pour générer le code QR. - Une image (
PictureBox
) pour afficher le code QR. - Un bouton supplémentaire pour sauvegarder le code QR.
Code :
Imports ZXing
Imports ZXing.Common
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class FormQRCodeGenerator
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
Try
' Récupérer le texte à encoder
Dim inputData As String = txtInput.Text
If String.IsNullOrEmpty(inputData) Then
MessageBox.Show("Veuillez entrer du texte ou une URL à convertir.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Générer le code QR
Dim qrCodeImage As Bitmap = GenerateQRCode(inputData)
' Afficher le code QR dans le PictureBox
picQRCode.Image = qrCodeImage
Catch ex As Exception
MessageBox.Show($"Erreur : {ex.Message}", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Try
If picQRCode.Image Is Nothing Then
MessageBox.Show("Aucune image à sauvegarder. Veuillez d'abord générer un code QR.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Sauvegarder l'image
Dim saveDialog As New SaveFileDialog()
saveDialog.Filter = "Images PNG|*.png"
If saveDialog.ShowDialog() = DialogResult.OK Then
picQRCode.Image.Save(saveDialog.FileName, ImageFormat.Png)
MessageBox.Show("Code QR sauvegardé avec succès !", "Succès", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Catch ex As Exception
MessageBox.Show($"Erreur lors de la sauvegarde : {ex.Message}", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
' Fonction pour générer un code QR
Private Function GenerateQRCode(input As String) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Height = 300,
.Width = 300,
.Margin = 1
}
' Générer le bitmap
Return writer.Write(input)
End Function
End Class
Instructions :
- Champ de Texte (txtInput) : Saisissez les données à encoder.
- Bouton Générer (btnGenerate) : Affiche le code QR généré dans le
PictureBox
(picQRCode
). - Bouton Sauvegarder (btnSave) : Sauvegarde le code QR en tant qu’image PNG.
Étape 4 : Personnalisation
- Dimensions du QR Code : Modifiez
.Height
et.Width
dansEncodingOptions
pour ajuster la taille. - Couleurs personnalisées : Utilisez
BarcodeWriter.Renderer
pour changer la couleur du QR code.
Exemple pour une couleur personnalisée :
writer.Renderer = New ZXing.Rendering.BitmapRenderer() With {
.Foreground = Color.Blue,
.Background = Color.White
}
Étape 5 : Aller Plus Loin
- Lecture de Codes QR : La bibliothèque ZXing.Net peut également décoder des codes QR.
- Formats multiples : Outre les QR codes, ZXing.Net prend en charge d’autres formats comme les codes-barres.
- Intégration web ou mobile : Utilisez ce code dans une application ASP.NET ou Xamarin pour des applications multiplateformes.
Pour générer des codes QR colorés avec ZXing.Net, vous pouvez personnaliser les couleurs du code QR en modifiant les propriétés de rendu, comme les couleurs de premier plan et d’arrière-plan. Voici comment procéder :
Étape 1 : Modifier les couleurs du QR code
ZXing.Net permet de définir un renderer personnalisé, où vous pouvez spécifier les couleurs du code QR.
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering
Imports System.Drawing
Public Function GenerateColoredQRCode(input As String, foregroundColor As Color, backgroundColor As Color) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Height = 300,
.Width = 300,
.Margin = 1
}
' Configurer les couleurs
writer.Renderer = New BitmapRenderer() With {
.Foreground = foregroundColor,
.Background = backgroundColor
}
' Générer et retourner le bitmap
Return writer.Write(input)
End Function
Étape 2 : Exemple d’utilisation dans une Application Console
Voici un exemple complet où vous pouvez saisir du texte et choisir les couleurs du code QR :
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering
Imports System.Drawing
Imports System.Drawing.Imaging
Module QRCodeGeneratorColored
Sub Main()
Console.WriteLine("=== Générateur de Code QR Coloré ===")
' Saisir le texte à encoder
Console.Write("Entrez le texte ou l'URL à convertir en code QR : ")
Dim inputData As String = Console.ReadLine()
' Définir les couleurs (ici en bleu et jaune)
Dim foregroundColor As Color = Color.Blue
Dim backgroundColor As Color = Color.Yellow
' Générer le code QR
Dim qrCodeImage As Bitmap = GenerateColoredQRCode(inputData, foregroundColor, backgroundColor)
' Sauvegarder l'image
Dim outputPath As String = "ColoredQRCode.png"
qrCodeImage.Save(outputPath, ImageFormat.Png)
Console.WriteLine($"Code QR coloré généré et enregistré sous : {outputPath}")
Console.WriteLine("Appuyez sur Entrée pour fermer.")
Console.ReadLine()
End Sub
Public Function GenerateColoredQRCode(input As String, foregroundColor As Color, backgroundColor As Color) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Height = 300,
.Width = 300,
.Margin = 1
}
' Configurer les couleurs
writer.Renderer = New BitmapRenderer() With {
.Foreground = foregroundColor,
.Background = backgroundColor
}
' Générer et retourner le bitmap
Return writer.Write(input)
End Function
End Module
Étape 3 : Exemple dans une Application Windows Forms
Ajoutez un champ pour entrer du texte, deux boutons pour choisir les couleurs et un PictureBox
pour afficher le QR code.
Code pour Windows Forms :
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class FormQRCodeColored
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
Try
' Récupérer le texte à encoder
Dim inputData As String = txtInput.Text
If String.IsNullOrEmpty(inputData) Then
MessageBox.Show("Veuillez entrer du texte ou une URL à convertir.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Générer le code QR coloré
Dim foregroundColor As Color = btnForegroundColor.BackColor
Dim backgroundColor As Color = btnBackgroundColor.BackColor
Dim qrCodeImage As Bitmap = GenerateColoredQRCode(inputData, foregroundColor, backgroundColor)
' Afficher le code QR dans le PictureBox
picQRCode.Image = qrCodeImage
Catch ex As Exception
MessageBox.Show($"Erreur : {ex.Message}", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub btnForegroundColor_Click(sender As Object, e As EventArgs) Handles btnForegroundColor.Click
' Choisir la couleur de premier plan
Dim colorDialog As New ColorDialog()
If colorDialog.ShowDialog() = DialogResult.OK Then
btnForegroundColor.BackColor = colorDialog.Color
End If
End Sub
Private Sub btnBackgroundColor_Click(sender As Object, e As EventArgs) Handles btnBackgroundColor.Click
' Choisir la couleur d'arrière-plan
Dim colorDialog As New ColorDialog()
If colorDialog.ShowDialog() = DialogResult.OK Then
btnBackgroundColor.BackColor = colorDialog.Color
End If
End Sub
Public Function GenerateColoredQRCode(input As String, foregroundColor As Color, backgroundColor As Color) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Height = 300,
.Width = 300,
.Margin = 1
}
' Configurer les couleurs
writer.Renderer = New BitmapRenderer() With {
.Foreground = foregroundColor,
.Background = backgroundColor
}
' Générer et retourner le bitmap
Return writer.Write(input)
End Function
End Class
Résultat
- L’utilisateur entre le texte ou l’URL à encoder.
- Il choisit les couleurs de premier plan et arrière-plan via un sélecteur de couleurs.
- Le QR code est affiché dans un
PictureBox
et peut être sauvegardé.
Points importants
- Accessibilité :
- Les QR codes avec des couleurs extrêmes ou peu contrastées peuvent être difficiles à scanner.
- Assurez-vous que les couleurs offrent un bon contraste (exemple : bleu sur blanc, noir sur jaune).
- Flexibilité :
- La méthode peut être adaptée pour d’autres tailles de QR codes ou pour enregistrer dans différents formats (JPEG, BMP, etc.).
- Validation des couleurs :
- Vérifiez que les couleurs choisies ne sont pas identiques, sinon le QR code sera illisible.
La personnalisation de la taille des codes QR dans ZXing.Net peut être réalisée en configurant les propriétés de l’objet EncodingOptions
, spécifiquement les paramètres de largeur (Width
) et de hauteur (Height
). Voici comment procéder.
Modifier la Taille des Codes QR
Exemple : Application Console
Voici un exemple simple où l’utilisateur peut choisir la taille du code QR à générer :
Imports ZXing
Imports ZXing.Common
Imports System.Drawing
Imports System.Drawing.Imaging
Module QRCodeGeneratorCustomSize
Sub Main()
Console.WriteLine("=== Générateur de Code QR Personnalisé ===")
' Saisir le texte à encoder
Console.Write("Entrez le texte ou l'URL à convertir en code QR : ")
Dim inputData As String = Console.ReadLine()
' Demander la largeur et la hauteur
Console.Write("Entrez la largeur (pixels) du QR Code : ")
Dim width As Integer = Integer.Parse(Console.ReadLine())
Console.Write("Entrez la hauteur (pixels) du QR Code : ")
Dim height As Integer = Integer.Parse(Console.ReadLine())
' Générer le code QR
Dim qrCodeImage As Bitmap = GenerateQRCode(inputData, width, height)
' Sauvegarder l'image
Dim outputPath As String = "QRCode_CustomSize.png"
qrCodeImage.Save(outputPath, ImageFormat.Png)
Console.WriteLine($"Code QR généré et enregistré sous : {outputPath}")
Console.WriteLine("Appuyez sur Entrée pour fermer.")
Console.ReadLine()
End Sub
' Fonction pour générer un code QR avec des dimensions personnalisées
Public Function GenerateQRCode(input As String, width As Integer, height As Integer) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Width = width,
.Height = height,
.Margin = 1 ' Contrôle la marge autour du QR Code
}
' Générer et retourner le bitmap
Return writer.Write(input)
End Function
End Module
Instructions :
- L’utilisateur entre le texte ou l’URL à convertir.
- Il fournit les dimensions (largeur et hauteur) en pixels.
- Le QR code est généré avec les dimensions spécifiées et enregistré sous forme d’image.
Exemple : Application Windows Forms
Dans une application Windows Forms, vous pouvez permettre à l’utilisateur de saisir la largeur et la hauteur via des champs d’entrée.
Code Exemple pour Windows Forms :
Imports ZXing
Imports ZXing.Common
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class FormQRCodeCustomSize
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
Try
' Récupérer le texte à encoder
Dim inputData As String = txtInput.Text
If String.IsNullOrEmpty(inputData) Then
MessageBox.Show("Veuillez entrer du texte ou une URL à convertir.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Récupérer la largeur et la hauteur
Dim width As Integer = Integer.Parse(txtWidth.Text)
Dim height As Integer = Integer.Parse(txtHeight.Text)
' Générer le code QR
Dim qrCodeImage As Bitmap = GenerateQRCode(inputData, width, height)
' Afficher le QR Code dans le PictureBox
picQRCode.Image = qrCodeImage
Catch ex As Exception
MessageBox.Show($"Erreur : {ex.Message}", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
' Fonction pour générer un code QR avec des dimensions personnalisées
Private Function GenerateQRCode(input As String, width As Integer, height As Integer) As Bitmap
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = New EncodingOptions With {
.Width = width,
.Height = height,
.Margin = 1 ' Contrôle la marge autour du QR Code
}
' Générer et retourner le bitmap
Return writer.Write(input)
End Function
End Class
Interface Utilisateur (UI) :
- Champ Texte (TextBox) : Pour saisir le texte ou l’URL.
- Champs Largeur et Hauteur (TextBox) : Pour définir les dimensions en pixels.
- Bouton Générer (Button) : Génère et affiche le QR code dans un
PictureBox
. - PictureBox : Affiche le QR code généré.
Comprendre les Paramètres de Taille
Width
: Largeur du code QR en pixels.Height
: Hauteur du code QR en pixels.Margin
: Taille de la marge blanche autour du QR code (en unités de modules du QR code).
Vous pouvez également définir une taille par défaut dans votre fonction pour éviter des erreurs si les utilisateurs ne spécifient pas les dimensions.
Optimisation des Dimensions
Assurez-vous que :
- Les dimensions spécifiées sont carrées (idéalement largeur = hauteur).
- Le QR code est suffisamment grand pour être scanné correctement par les appareils mobiles.