Passer au contenu du pied de page
UTILISATION D'IRONQR

Codes QR .NET Core: Lire et générer des codes QR en C#

Lors de la création d'applications web ou d'entreprise sur .NET Core, la prise en charge des codes QR (pour le suivi des stocks, les flux de paiement ou l'authentification à deux facteurs) est une exigence fréquente. Plutôt que de consacrer des cycles de développement à des algorithmes d'encodage de bas niveau, vous pouvez opter pour une bibliothèque dédiée qui gère l'intégralité du flux de travail. IronQR fournit une solution complète de code QR for .NET, couvrant tout, de la génération de base à la lecture basée sur l'apprentissage automatique et à la correction d'erreurs avancée.

Prêt à l'essayer vous-même ? Démarrez votre essai gratuit dès aujourd'hui et découvrez à quelle vitesse vous pouvez ajouter la fonctionnalité QR à votre projet.

NuGet Installer avec NuGet

PM >  Install-Package IronQR

Consultez IronQR sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL.

Comment installer la bibliothèque de codes QR ?

L'installation IronQR via NuGet ne prend que quelques secondes. Ouvrez Visual Studio, accédez à Outils > Gestionnaire de packages NuGet > Gérer les packages NuGet pour la solution , recherchez IronQR, et cliquez sur Installer . Ce package possède un minimum de dépendances et est compatible nativement avec Windows, macOS et Linux.

Install-Package IronQR

IronQR cible .NET Core 6, 7, 8, 9 et 10, ainsi que .NET Framework 4.6.2 et versions ultérieures. Pour les projets multiplateformes, une intégration SkiaSharp gère le traitement d'images sur les environnements d'exécution non-Windows. La bibliothèque fonctionne avec les applications web ASP.NET Core , les applications console et les solutions de bureau sans configuration d'exécution supplémentaire. Une fois installées, toutes les méthodes et tous les types d'extensions nécessaires sont immédiatement disponibles.

Comment lire un code QR basique à partir d'une image ?

La lecture des données des codes QR à partir de fichiers image ne nécessite que quelques lignes de code. La classe QrReader utilise un modèle d'apprentissage automatique avancé qui évalue la qualité de l'image et sélectionne automatiquement le mode de segmentation approprié, vous donnant des résultats précis même lorsque l'image d'entrée n'est pas idéale.

using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
$vbLabelText   $csharpLabel

Entrée QR Code

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 1 - Saisie du code QR

Sortie

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 2 - Exemple de résultat de scan de code QR

La méthode QrReader.Read() traite le QrImageInput et renvoie un IEnumerable<QrResult>, où chaque résultat contient le texte décodé, l'URL si elle a été encodée et la position spatiale du symbole QR dans l'image. La bibliothèque accepte les tableaux d'octets, les chemins de fichiers et les objets AnyBitmap, vous offrant une flexibilité pour toute architecture de projet, que vous lisiez à partir d'un disque, d'une base de données ou d'un flux de caméra en direct.

Le modèle d'apprentissage automatique qui sous-tend le lecteur distingue IronQR des bibliothèques purement algorithmiques. Il gère les imperfections du monde réel telles que le flou de mouvement, l'occlusion partielle et l'éclairage inégal sans nécessiter de prétraitement manuel ni de réglage de seuil.

Comment extraire des données avancées de codes QR ?

Au-delà du décodage de valeurs de base, IronQR expose les coordonnées, les segments de données brutes et les informations au niveau du module de chaque symbole scanné. Ceci est essentiel pour les flux de travail de traitement de documents où il est nécessaire de savoir précisément où un code QR apparaît sur la page, ou pour les applications qui doivent gérer plusieurs codes dans une seule image.

using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
$vbLabelText   $csharpLabel

Saisissez le code QR

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 3 - Saisie du code QR

Résultats de la lecture QR avancée

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 4 - Résultats pour l'extraction avancée de données QR.

La collection QrResult.Points contient les coordonnées des quatre coins du symbole QR détecté dans l'espace des pixels. Votre application peut les utiliser pour superposer des cadres de délimitation sur les images de documents, recadrer la région QR pour un traitement ultérieur ou transmettre les données de localisation à un système en aval qui associe les coordonnées physiques aux positions logiques du document.

IronQR traite les codes contenant des logos intégrés personnalisés, des modules endommagés ou des entrées basse résolution grâce au même pipeline d'apprentissage automatique. La bibliothèque ne nécessite aucune étape de prétraitement distincte : la détection et le décodage s'effectuent en un seul appel.

Comment les niveaux de correction d'erreurs affectent-ils la qualité des codes QR ?

La correction d'erreurs est le mécanisme qui permet à un lecteur de code QR de récupérer les données originales même lorsqu'une partie du code est masquée, mal imprimée ou physiquement endommagée. La norme QR Code définit quatre niveaux – Faible (L), Moyen (M), Quartile (Q) et Élevé (H) – chacun privilégiant la capacité de stockage à la tolérance aux dommages.

Niveau Capacité de récupération Utilisation optimale
L ~7% Affichages numériques nets, densité de données maximale
M ~15% Applications d'impression générales
Q ~25% Étiquettes industrielles, usure modérée prévue
H ~30% Logos intégrés, surfaces extérieures ou soumises à une forte usure

Lors de la génération de codes QR, la spécification d'un niveau de correction d'erreur plus élevé garantit que le résultat reste fiable dans des conditions de lecture réelles :

using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
$vbLabelText   $csharpLabel

Sortie

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 5 - Code QR généré avec un taux de correction d'erreur élevé.

Le constructeur QrOptions accepte le niveau de correction d'erreur et un numéro de version maximum. Les codes de version 40 peuvent stocker jusqu'à 7 089 caractères numériques, tandis que les codes de version 1 n'en contiennent que 41. Définir une version maximale inférieure limite la taille de la sortie, ce qui est utile lorsque vous avez besoin de dimensions physiques cohérentes pour un lot. Plus le niveau de correction d'erreurs est élevé, plus le nombre de modules réservés à la redondance est important, ce qui réduit la capacité de données nette pour une version donnée.

La fonction de tolérance aux pannes IronQR s'appuie sur cette propriété : lors de la lecture de codes générés à des niveaux de correction plus élevés, la bibliothèque récupère des données à partir de codes qui échoueraient totalement avec un décodeur purement algorithmique.

Comment générer des codes QR avec des caractères internationaux ?

IronQR prend en charge toute la gamme des modes d'encodage QR : numérique, alphanumérique, octet et Kanji. Pour les textes japonais et autres contenus Unicode, la bibliothèque sélectionne automatiquement l'encodage le plus économe en espace :

using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
$vbLabelText   $csharpLabel

Sortie du code QR

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 6 - Code QR généré

L'encodage Kanji utilise deux octets par module au lieu de huit bits, de sorte qu'un code QR en langue japonaise de même version stocke beaucoup plus de caractères qu'un équivalent en mode octet UTF-8. Pour les contenus mixtes, comme une URL suivie de texte japonais, IronQR segmente l'entrée et encode chaque segment en mode optimal. Vous n'avez pas besoin de spécifier manuellement les limites des segments ni d'appeler les fonctions d'assistance à l'encodage ; Le pipeline d'encodage s'en charge pour vous.

Cette sélection automatique couvre également les marqueurs d'interprétation de canal étendue (ECI), qui signalent aux scanners que des jeux de caractères non standard sont utilisés. Les applications destinées aux marchés internationaux peuvent transmettre directement n'importe quelle chaîne Unicode à QrWriter.Write() sans configuration séparée.

Comment utiliser les générateurs de charge utile pour les données QR structurées ?

Un code QR qui encode une simple URL fonctionne pour le partage de liens simples, mais de nombreuses applications ont besoin d'encoder des données structurées : identifiants WiFi, fiches de contact au format vCard ou données d'événements. Le formatage manuel de ces charges utiles est source d'erreurs ; L'absence d'un point-virgule ou un ordre incorrect des champs peuvent entraîner une mauvaise interprétation des données par les scanners.

IronQR fournit des fonctions d'assistance pour la charge utile qui construisent correctement ces chaînes structurées :

using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
$vbLabelText   $csharpLabel

Création d'un code QR

Générateur de codes QR .NET Core: Lisez et générez des codes QR en quelques lignes de code : Image 7 - Code QR créé à partir d'une URL

La méthode QrWriter.Write() accepte soit une chaîne de caractères simple, soit un objet de charge utile structuré. Pour les réseaux Wi-Fi, la charge utile encode le SSID, le mot de passe et le type de sécurité dans un format reconnu par les scanners Android et iOS. Pour les informations de contact, le résultat est conforme à la norme MeCard utilisée par la plupart des lecteurs de QR code mobiles. La page de la fonctionnalité de génération documente tous les types de charges utiles pris en charge et leurs champs obligatoires.

La bibliothèque génère des images avec des dimensions en pixels configurables. Pour une utilisation en production, la génération de codes d'une résolution minimale de 200x200 pixels garantit une numérisation fiable à des distances typiques de smartphone. Les formats plus grands sont avantageux pour les applications extérieures ou imprimées où la distance de numérisation dépasse un mètre.

Comment personnaliser l'apparence d'un code QR ?

IronQR vous permet de contrôler l'apparence visuelle des codes générés sans sacrifier leur lisibilité. Vous pouvez modifier les couleurs de premier plan et d'arrière-plan, appliquer une identité visuelle personnalisée ou intégrer un logo dans la zone de silence centrale.

using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
$vbLabelText   $csharpLabel

L'intégration d'un logo réduit la zone de données effective, la bibliothèque exige donc un niveau de correction d'erreurs H lorsqu'un logo est fourni. La zone de silence réservée au centre représente environ 30 % de la surface du code, ce qui est dans la capacité de récupération du niveau H. La bibliothèque applique automatiquement cette contrainte : si vous définissez un niveau de correction d'erreur inférieur en plus d'un logo, IronQR génère une exception avec un message descriptif au lieu de produire un code dont l'analyse est peu fiable.

Pour les applications ASP.NET Core , le tutoriel sur le générateur de codes QR ASP.NET Core montre comment servir les codes QR générés en tant que réponses d'image à partir d'une action de contrôleur. Le flux de sortie écrit directement dans la réponse sans E/S de fichiers intermédiaires, ce qui maintient une faible latence pour les points de terminaison à fort trafic.

Comment lire les codes QR dans une application ASP.NET Core ?

La numérisation des codes QR côté serveur (à partir d'images téléchargées, de chaînes de traitement de documents ou de systèmes d'inspection automatisés) est un cas d'utilisation courant de l'API de lecture. Le guide du scanner de code QR ASP.NET couvre la configuration complète du contrôleur et du service, mais le modèle de lecture de base est le même que celui d'une application console :

using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
$vbLabelText   $csharpLabel

La méthode AnyBitmap.FromStream() accepte tout flux lisible ; le même chemin d'exécution fonctionne donc pour les fichiers téléchargés via un formulaire, les images récupérées depuis un stockage blob ou les images extraites d'un pipeline vidéo. Le contrôleur n'écrit aucun fichier temporaire sur le disque, ce qui est important pour les déploiements conteneurisés où le système de fichiers peut être en lecture seule.

Pour les scénarios à haut débit, instanciez QrReader une fois par durée de vie de l'application en tant que singleton, puisque le coût de chargement du modèle ML est payé lors de la première construction. Les appels suivants Read() sur la même instance sont thread-safe et partagent le modèle chargé.

Comment générer des codes QR dans une application .NET MAUI ?

Le tutoriel sur les codes QR .NET MAUI démontre la génération multiplateforme complète sur iOS, Android, macOS et Windows. IronQR utilise le moteur de rendu SkiaSharp lorsqu'il est exécuté sur des plateformes non-Windows, ce qui garantit un rendu cohérent sur toutes les cibles MAUI.

using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
$vbLabelText   $csharpLabel

Sur les cibles mobiles, ExportBytes() renvoie un tableau d'octets PNG que vous pouvez alimenter directement dans un StreamImageSource ou écrire dans un ImageButton. L'échafaudage MAUI ne nécessite aucun chemin de code spécifique à la plateforme : la même logique de génération s'exécute de manière identique sur les quatre cibles MAUI.

Pour les projets VB .NET , la surface de l'API est identique ; Seule la syntaxe diffère. La bibliothèque est fournie sous forme d'un seul package NuGet , sans qu'aucun assembly VB .NET séparé ne soit requis.

Quelles sont vos prochaines étapes ?

IronQR couvre l'intégralité du cycle de vie des codes QR en .NET , de la génération de base et de l'encodage structuré de la charge utile à la lecture par apprentissage automatique des codes endommagés ou marqués. La bibliothèque gère l'encodage Kanji, la configuration de la correction d'erreurs et la sortie d'images multiplateformes, vous permettant ainsi de vous concentrer sur la logique spécifique à votre application.

Pour mettre en pratique ce que vous avez appris :

Questions Fréquemment Posées

Quelles versions de .NET sont prises en charge par IronQR ?

IronQR prend en charge .NET Core 6, 7, 8, 9 et 10, ainsi que .NET Framework 4.6.2 et versions ultérieures. Il cible également .NET Standard 2.0 et versions ultérieures, ce qui le rend compatible avec les projets Xamarin, .NET MAUI, Blazor et ASP.NET Core .

Comment lire un code QR à partir d'un fichier image en C# ?

Chargez l'image à l'aide de `AnyBitmap.FromFile()`, transmettez-la à un `QrImageInput`, puis appelez `QrReader.Read()`. La méthode renvoie un `IEnumerable`. où chaque résultat contient la valeur décodée, l'URL et les coordonnées du coin.

Quels sont les quatre niveaux de correction d'erreur des codes QR ?

Les quatre niveaux sont : Faible (F, environ 7 % de récupération), Moyen (M, environ 15 %), Quartile (Q, environ 25 %) et Élevé (E, environ 30 %). Les niveaux supérieurs ajoutent des modules de redondance, ce qui réduit la capacité de données nette mais améliore la fiabilité de la lecture des codes endommagés ou partiellement masqués.

IronQR peut-il lire les codes QR contenant un logo ou partiellement endommagés ?

Oui. Le modèle de détection basé sur l'apprentissage automatique d' IronQR gère les codes partiellement endommagés, les logos intégrés, le flou de mouvement et les entrées basse résolution sans nécessiter de prétraitement manuel.

Comment intégrer un logo dans un code QR avec IronQR?

Attribuez à la propriété `Logo` d'un objet `QrOptions` une image `AnyBitmap` de votre logo et définissez le niveau de correction d'erreur sur « Élevé ». IronQR applique automatiquement cette contrainte car un logo centré occupe environ 30 % de la surface du code.

IronQR prend-il en charge les caractères japonais et autres caractères Unicode ?

Oui. Passez n'importe quelle chaîne Unicode à `QrWriter.Write()` et la bibliothèque sélectionnera automatiquement le mode Kanji pour les caractères japonais ou le mode octet avec marqueurs ECI pour les autres contenus Unicode.

Comment générer des codes QR dans une application ASP.NET Core ?

Utilisez `AnyBitmap.FromStream()` pour lire les images téléchargées et `QrWriter.Write()` pour générer les codes. Retournez le résultat sous forme de `FileContentResult` de type MIME `image/png`. Instanciez `QrReader` en tant que singleton afin d'amortir le coût de chargement du modèle d'apprentissage automatique.

IronQR est-il multiplateforme ?

Oui. IronQR utilise un moteur de rendu SkiaSharp sur les plateformes non-Windows, assurant une génération et une lecture cohérentes des codes QR sur macOS, Linux, iOS et Android via .NET MAUI.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me