VB.NET

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

  1. Environnement de développement :
  2. 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 :

  1. L’utilisateur entre un texte ou une URL.
  2. Le programme génère un code QR et le sauvegarde sous forme d’image dans le dossier de l’application.
  3. 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 :

  1. Champ de Texte (txtInput) : Saisissez les données à encoder.
  2. Bouton Générer (btnGenerate) : Affiche le code QR généré dans le PictureBox (picQRCode).
  3. Bouton Sauvegarder (btnSave) : Sauvegarde le code QR en tant qu’image PNG.

Étape 4 : Personnalisation

  • Dimensions du QR Code : Modifiez .Height et .Width dans EncodingOptions 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

  1. Lecture de Codes QR : La bibliothèque ZXing.Net peut également décoder des codes QR.
  2. Formats multiples : Outre les QR codes, ZXing.Net prend en charge d’autres formats comme les codes-barres.
  3. 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

  1. L’utilisateur entre le texte ou l’URL à encoder.
  2. Il choisit les couleurs de premier plan et arrière-plan via un sélecteur de couleurs.
  3. Le QR code est affiché dans un PictureBox et peut être sauvegardé.

Points importants

  1. 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).
  2. 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.).
  3. 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 :

  1. L’utilisateur entre le texte ou l’URL à convertir.
  2. Il fournit les dimensions (largeur et hauteur) en pixels.
  3. 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) :

  1. Champ Texte (TextBox) : Pour saisir le texte ou l’URL.
  2. Champs Largeur et Hauteur (TextBox) : Pour définir les dimensions en pixels.
  3. Bouton Générer (Button) : Génère et affiche le QR code dans un PictureBox.
  4. 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.

Autres articles

Guide pratique : Déclaration d’un objet en...
La déclaration d’un objet en VB.NET est une tâche fondamentale...
Read more
Guide : Déclaration d’un objet en VB.NET...
VB.NET (Visual Basic .NET) est un langage orienté objet qui...
Read more
Guide : Comment ouvrir une base de...
Ce guide explique étape par étape comment ouvrir une base...
Read more

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *