Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Les codes QR sont devenus omniprésents dans notre monde numérique, fréquemment utilisés dans la publicité, le commerce de détail, la gestion d'événements, etc. Pour les développeurs travaillant dans le Framework .NET, l'intégration de capacités de lecture de codes QR dans les applications web peut améliorer l'expérience de l'utilisateur et la fonctionnalité. Cet article explore le processus de mise en œuvre d'un scanner de code QR dans une application ASP.NET, en couvrant les outils et les bibliothèques nécessaires, ainsi que la mise en œuvre étape par étape. Nous utiliseronsIronQRune bibliothèque puissante pour la génération de codes QR à partir deIron Software pour lire les codes QR.
Créer un projet ASP.NET à l'aide de Visual Studio
InstallerIronQR bibliothèque à partir du gestionnaire de paquets
Télécharger l'image QR et lire la QR.
QR(Réponse rapide) sont des codes-barres bidimensionnels qui peuvent stocker des informations allant de l'URL aux coordonnées, généralement scannés à l'aide de smartphones ou d'appareils de lecture dédiés. Dans les applications web, les codes QR peuvent avoir diverses fonctions, telles que :
IronQR est une puissante bibliothèque .NET conçue pour la génération et la numérisation de codes QR, offrant des fonctionnalités robustes et faciles à utiliser. Cette bibliothèque polyvalente gère non seulement les codes QR, mais aussi d'autres types de codes-barres, ce qui en fait un choix privilégié pour les développeurs travaillant dans l'écosystème .NET. Nous verrons ici comment intégrer la bibliothèque IronQR for .NET dans une application ASP.NET pour faciliter la lecture des codes QR.
Lire les QR Codes :IronQR peut lire les codes QR à partir de différents formats d'image, notamment jpg, png, svg, bmp, gif, tif, tiff, etc. Il prend également en charge les images multipages et les modèles de détection QR personnalisés. Les formats de données de sortie comprennent le texte, les URL, les coordonnées, etc.
Rédaction de codes QR : Vous pouvez générer des codes QR et les enregistrer sous forme d'images(jpg, png, gif, tiff, bmp)ou des flux de données, ou même de les ajouter à des PDF existants. Encodez des données telles que du texte, des URL, des octets et des nombres et générez des codes QR. Personnalisez le style du code QR en le redimensionnant, en ajustant les marges, en le recolorant et en ajoutant des logos.
Traitement et correction des erreurs :IronQR fournit des messages d'erreur détaillés et une correction d'erreur QR personnalisée. Il garantit la tolérance aux pannes et prend en charge la vérification de la nullité et les sommes de contrôle.
Modèle d'apprentissage automatique avancé :IronQR utilise un modèle avancé d'apprentissage automatique pour la reconnaissance des codes QR. Ce modèle garantit une lecture précise et fiable des codes QR sur différentes plateformes, y compris les environnements mobiles, de bureau et en nuage.
Compatibilité multiplateforme :IronQR est conçu pour C#, F# et VB.NET, fonctionnant sur différentes versions de .NET comme .NET Core(8, 7, 6, 5 et 3.1+), Standard .NET(2.0+), Framework .NET(4.6.2+)
Il prend en charge différents types de projets, y compris les projets web(Blazor et WebForms)mobile(Xamarin et MAUI), bureau(WPF ET MAUI)et les applications sur console.
Prise en charge étendue des codes QR : IronQR excelle dans le traitement d'une large gamme de codes QR et d'autres types de codes-barres. Qu'il s'agisse de codes QR standard, de micro-codes QR, d'une image de code-barres QR ou même de formats spécifiques comme Aztec ou Data Matrix,IronQR vous couvre. IronQR prend également en charge la fonctionnalité de lecture des codes-barres QR.
IronQR des produits de l'API .NET, qui comprend divers outils pour les documents bureautiques, l'édition de PDF, l'OCR, etc.
Commencez par créer un nouveau projet et sélectionnez le modèle MVC comme indiqué ci-dessous
Ensuite, vous devez fournir un nom de projet et un emplacement pour le projet.
Sélectionnez la version .NET.
En cliquant sur le bouton de création, le code et le projet suivants seront créés.
InstallerIronQR à partir du gestionnaire de paquets de Visual Studio, comme indiqué ci-dessous
IronQR peut également être installé à l'aide deNuGet Gestionnaire de paquets.
Créons maintenant une application de code QR.
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage
{
get;
set;
}
}
}
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage
{
get;
set;
}
}
}
Imports System.ComponentModel.DataAnnotations
Namespace IronQRScannerAsp.Models
Public Class QRCodeModel
<Display(Name := "Select QR Image")>
Public Property QRCodeImage() As IFormFile
End Class
End Namespace
Ajoutez un nouveau contrôleur en faisant un clic droit sur le dossier du contrôleur et en lui donnant un nom, comme indiqué ci-dessous :
Sélectionnez Empty Controller.
Indiquer le nom du contrôleur.
Ajoutez maintenant le code suivant au contrôleur.
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream);
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream);
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
Imports IronQr
Imports IronQRScannerAsp.Models
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Namespace IronQRScannerAsp.Controllers
Public Class QrCodeController
Inherits Controller
Private ReadOnly _environment As IWebHostEnvironment
Public Sub New(ByVal environment As IWebHostEnvironment)
_environment = environment
End Sub
Public Function Index() As IActionResult
ViewBag.QrCodeText = "Text"
Return View()
End Function
<HttpPost>
Public Function ScanQRCode(ByVal qrImage As QRCodeModel) As IActionResult
Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode")
If Not Directory.Exists(path) Then
Directory.CreateDirectory(path)
End If
Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png")
Using stream = System.IO.File.Create(filePath)
qrImage.QRCodeImage.CopyTo(stream)
End Using
' Open the asset to read a QR Code from
Dim bitmap = AnyBitmap.FromFile(filePath)
' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(bitmap)
' Create a QR Reader object
Dim reader As New QrReader()
' Read the Input an get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
ViewBag.QrCodeText = results.First().Value
Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/ScanQRCode/qrcode.png"
ViewBag.QrCodeUri = imageUrl
Return View()
End Function
End Class
End Namespace
L'extrait de code fourni concerne un contrôleur ASP.NET Core MVC nommé QrCodeController, qui est conçu pour gérer les fonctionnalités de numérisation des codes QR à l'aide de la bibliothèque IronQR. Voici une brève description de ce que fait le code :
Il construit un chemin d'accès au fichier(chemin) dans le répertoire racine de l'application web, spécifiquement pour l'enregistrement des images de codes QR("Répertoire "ScanQRCode).
Il vérifie si ce répertoire existe et, si ce n'est pas le cas, le crée afin d'éviter toute erreur de fichier non trouvé lors de l'enregistrement du fichier.
Il construit le chemin d'accès complet au fichier(filePath
) où l'image du code QR téléchargée sera sauvegardée("ScanQRCode/qrcode.png"). Cette opération écrase tout fichier existant portant le même nom, ce qui permet de traiter efficacement les nouvelles analyses sans accumuler de fichiers.
Il ouvre un flux de fichiers et copie le contenu de l'image téléchargée(qrImage.QRCodeImage
, probablement un fichier de formulaire) à l'emplacement spécifié sur le serveur.
Utilise AnyBitmap.FromFile(chemindefichier)
pour charger le fichier image enregistré dans un format adapté à la lecture du code QR. AnyBitmap
sert probablement de classe d'aide pour convertir les fichiers images en un objet bitmap que le lecteur QR peut traiter.
Enveloppe le bitmap chargé dans un QrImageInput
, qui est spécifiquement conçu pour être une entrée pour le processus de lecture du code QR. Instancie un QrReader
, un composant de la bibliothèque IronQR configuré pour détecter et décoder les codes QR.
Appelle reader.Read(imageInput)
pour scanner l'image pour les codes QR. Cette méthode renvoie un IEnumerable<QrResult>
, où chaque QrResult
contient les données d'un code QR détecté dans l'image. Il extrait la valeur du premier résultat en utilisant results.First().Value
et stocker cette information décodée dans ViewBag.QrCodeText
. Cela suppose que l'image contient au moins un code QR et ne gère pas les erreurs potentielles lorsqu'aucun code QR n'est détecté.
Construit un URL(imageUrl
) pointant vers l'image du code QR enregistrée sur le serveur. Cette URL est construite en utilisant le schéma, l'hôte et le chemin d'accès de la requête HTTP en cours, ce qui garantit qu'elle est accessible aux utilisateurs. L'URL construite est enregistrée dans ViewBag.QrCodeUri
.
Retourne la même vue(Voir()
)qui affiche probablement à la fois l'image du code QR et le texte décodé à l'utilisateur. Le ViewBag
est utilisé pour transmettre le texte décodé du code QR et l'URL de l'image à la vue pour le rendu.
Ajoutez une nouvelle vue, faites un clic droit sur la méthode d'action CreateQRCode
dans la classe QrCodeController
.
Sélectionnez l'option "Ajouter une vue" puis "Vue rasoir". Cliquez sur "Ajouter".
Sélectionnez ensuite le modèle "Créer" et la classe de modèle générée précédemment.
Remplacez maintenant le code de la classe de vue par le code ci-dessous.
@model IronQRScannerAsp.Models.QRCodeModel
@{
ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
<div class="col-md-14">
<form asp-action="ScanQRCode" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
</div>
<div class="form-group">
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
@model IronQRScannerAsp.Models.QRCodeModel
@{
ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
<div class="col-md-14">
<form asp-action="ScanQRCode" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
</div>
<div class="form-group">
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
model ReadOnly Property () As IronQRScannerAsp.Models.QRCodeModel
ViewData("Title") = "ScanQRCode"
End Property
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class="form-group"> <h3> Scanned Text:</h3> <h4> @ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> <div> <a asp-action="Index"> Clear</a> </div> @section Scripts
"form-group"> </div> <div class="form-group"> (Of h3) Scanned Text
Inherits </h3>(Of h4) ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> (Of div) <a asp-action="Index"> Clear</a> </div> section Scripts
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class
"text-danger"></div> <div class="form-group"> </div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class
"ModelOnly" class="text-danger"></div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class
"multipart/form-data"> <div asp-validation-summary="ModelOnly" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
"ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype
"col-md-14"> <form asp-action="ScanQRCode" enctype
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action
"row"> <div class="col-md-14"> <form asp-action
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
Private Private Private Private Private Private Private Friend (Of h1) ScanQRCode</h1> (Of h4) QRCodeModel</h4> <hr /> <div Class="row"> <div class
@
If True Then
Await Html.RenderPartialAsync("_ValidationScriptsPartial")
End If
End Class
Maintenant, dans le fichier program.cs, modifiez le code suivant pour que la vue ci-dessus devienne la route par défaut
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(name:= "default", pattern:= "{controller=QrCode}/{action=Index}")
Cela change la route par défaut de HomeController
à notre contrôleur QrCode
.
Image d'entrée avec URL : https://ironsoftware.com/csharp/qr.
Sur la page, sélectionnez une image de code QR et cliquez sur télécharger pour décoder le code QR. Cette application peut également être modifiée pour lire un flux vidéo et afficher les résultats.
Pour lire les codes QR avancés, IronQR propose les paramètres suivants.
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum
Imports System.Collections.Generic
Private inputBmp = AnyBitmap.FromFile("QrImage.png")
' Use Auto => Machine Learning Scan
' Careful Scan => Useful for scanning documents slowly and carefully
Private scan_ML_and_normal As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results1 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_and_normal)
' Use Machine Learning Scan
' High Speed => For scanning frames from a camera
Private scan_ML_only As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results2 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_only)
' Use Scan without Machine Learning
Private scan_normal_only As New QrImageInput(inputBmp, QrScanMode.OnlyBasicScan)
Private results3 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_normal_only)
En tirant parti de la technologie ML la plus récente, nous avons élevé le lecteur de code QR à de nouveaux sommets. Le modèle ML sophistiqué améliore la précision et l'efficacité des applications de décodage des codes QR, même dans des conditions complexes. Qu'il s'agisse de lire des codes QR à partir d'images fixes, de flux vidéo ou de flux de caméras en direct, la solution alimentée par la ML fournit les informations requises de manière rapide et fiable. Cette innovation rationalise la récupération des données et renforce la sécurité en identifiant les codes QR authentiques et en signalant les menaces potentielles. Grâce à notre technologie ML, vous pouvez être certain que vos capacités de numérisation de codes QR sont à la pointe de la technologie, offrant à vos utilisateurs une expérience fluide et sécurisée
Les développeurs peuvent obtenir une licence d'essai d'IronQR à l'adresse suivanteici. La clé doit être placée dans le fichier appSettings.json.
{
"IronQR.License.LicenseKey": "My key"
}
Dans cet article, nous avons exploré comment scanner des codes QR dans ASP.NET Core à l'aide de l'applicationIronQR. IntégrerIronQR dans une application ASP.NET pour la lecture de codes QR est un processus simple qui améliore les capacités des applications web, les rendant plus interactives et conviviales. IronQRles puissantes fonctionnalités et la facilité d'utilisation du logiciel en font un excellent choix pour les développeurs qui souhaitent mettre en œuvre des fonctionnalités liées aux codes-barres.
9 produits de l'API .NET pour vos documents de bureau