如何在 ASP .NET 中扫描 QR 代码
QR码在我们的数字世界中无处不在,常用于广告、零售、活动管理等。 对于在ASP.NET框架中工作的开发者,将QR码扫描功能集成到Web应用程序中可以增强用户体验和功能性。 本文探讨了在ASP.NET应用程序中实施QR码扫描器的过程,涵盖所需的工具、库及逐步实现。 我们将使用IronQR,一个来自Iron Software的强大QR码生成库来读取QR码。
如何在ASP.NET中扫描QR码
- 使用Visual Studio创建一个ASP.NET项目。
- 从包管理器安装IronQR库。
- 上传QR图像并读取QR。
- 读取高级QR码。
理解QR码及其使用案例
QR(快速响应)码是二维条码,可以存储从URL到联系信息的各类信息,通常通过智能手机或专用扫描设备扫描。 在Web应用程序中,QR码可以用于多种用途,例如:
*快速访问网站:*无需输入即可将用户引导至特定 URL。 活动票务:验证门票上的二维码以确认是否可进入活动现场。 支付系统:通过扫描二维码实现便捷支付。 产品信息:**提供有关产品的更多信息。
介绍IronQR
IronQR是一个专为QR码生成和扫描设计的强大.NET库,以易用性提供强大的功能。 这个多功能库不仅能处理QR码,还能管理其他类型的条码,是在.NET生态系统中工作的开发者的首选。 在这里,我们将探讨如何将IronQR库集成到ASP.NET应用程序中以便进行QR码扫描。
IronQR的主要优势和特点
1.读取二维码: IronQR可以读取各种图像格式的二维码,包括 jpg、png、svg、bmp、gif、tif、tiff 等。 它还支持多页图像和自定义QR检测模型。 输出数据格式包括文本、网址、坐标等。
2.编写二维码:您可以生成二维码并将其保存为图像(jpg、png、gif、tiff、bmp)、流,甚至可以将其添加到现有的 PDF 中。 编码数据如文本,网址,字节和数字并生成QR码。 通过调整大小、调整边距、重新着色和添加徽标来自定义QR码样式。
3.错误处理和纠正: IronQR提供详细的错误信息和自定义 QR 错误纠正。 它确保故障容错,并支持空检查和校验和。
4.先进的机器学习模型: IronQR使用先进的机器学习模型进行二维码识别。 此模型确保在各种平台(包括移动、桌面和云环境)上准确可靠地读取QR码。
5.跨平台兼容性: IronQR专为 C#、F# 和 VB.NET 设计,可在各种 .NET 版本上运行,例如 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)、.NET Framework(4.6.2+)。
- 它支持不同的项目类型,包括Web(Blazor & WebForms)、移动(Xamarin & MAUI)、桌面(WPF & MAUI)和控制台应用程序。
7.广泛的二维码支持: IronQR 擅长处理各种二维码和其他类型的条形码。 无论您是在处理标准QR码、Micro QR码、QR码条码图像,甚至特定格式如Aztec或Data Matrix,IronQR都能够满足您的需求。 IronQR还支持读取QR码条码的功能。
[IronQR](Iron Suite)的.NET API产品包括多种工具,用于办公文档、PDF编辑、OCR等。
步骤 1:使用 Visual Studio 创建新 ASP.NET 项目
首先创建一个新项目,并选择如下所示的MVC模板:

接下来,应为项目提供项目名称和位置。

选择 .NET 版本。

点击创建按钮将创建如下代码和项目。

步骤 2:从 Visual Studio 包管理器中安装 IronQR 库
从Visual Studio包管理器安装IronQR库,如下所示:


步骤 3:上传QR图像并读取QR图像
现在,让我们创建一个QR码应用程序。
创建 QRCodeModel
// Import necessary namespaces
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
// Property to hold the uploaded QR code image
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage { get; set; }
}
}// Import necessary namespaces
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
// Property to hold the uploaded QR code image
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage { get; set; }
}
}创建一个二维码控制器
通过右键单击控制器文件夹并提供名称来添加一个新的控制器,如下所示:

选择空控制器。

提供控制器名称。

现在将以下代码添加到控制器中。
// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
// Controller to handle QR code scanning functionalities
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
// Constructor for dependency injection of the hosting environment
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
// Displays the initial View
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
// Handles the POST request to scan a QR code
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
// Define the file path for saving the uploaded QR image
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
}
// 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 and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display scanned text and image on the view
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
// Controller to handle QR code scanning functionalities
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
// Constructor for dependency injection of the hosting environment
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
// Displays the initial View
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
// Handles the POST request to scan a QR code
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
// Define the file path for saving the uploaded QR image
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
}
// 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 and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display scanned text and image on the view
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}代码解释
提供的代码片段是一个名为QrCodeController的ASP.NET Core MVC控制器,用于使用IronQR库处理QR码扫描功能。 以下是代码的简要描述:
1. 保存上传的QR码图像
路径构建
- 它在应用程序的Web根目录中构建一个用于保存QR码图像("ScanQRCode"目录)的文件路径。
- 它会检查此目录是否存在,如果不存在,则创建它,以避免在保存文件时出现找不到文件的错误。
文件保存
- 它构建上传的QR码图像将要保存的完整文件路径(
filePath)("ScanQRCode/qrcode.png")。 这将覆盖任何同名的现有文件,从而有效地处理新扫描,而不会积累文件。 - 它打开一个文件流并将上传的图像(
qrImage.QRCodeImage,可能是表单文件)的内容复制到服务器上指定的位置。
2. 解码QR码
读取图像文件
- 使用
AnyBitmap.FromFile(filePath)将保存的图像文件加载为适合QR码扫描的格式。AnyBitmap可能作为一个辅助类,用于将图像文件转换为QR阅读器可以处理的位图对象。
初始化QR阅读器
- 将加载的位图包装到
QrImageInput中,专门设计为QR码读取过程的输入。 - 实例化一个IronQR库的组成部分
QrReader,配置为检测和解码QR码。
扫描QR码
- 调用
reader.Read(imageInput)来扫描图像中的QR码。 此方法返回IEnumerable<QrResult>,每个QrResult包含从图像中检测到的QR码的数据。 - 使用
results.First().Value提取第一个结果的值,并将此解码信息存储在ViewBag.QrCodeText中。 这假设图像中至少包含一个QR码,并且不处理未检测到QR码的潜在错误。
3. 准备并返回响应
图像URL构建
- 构建一个指向服务器上保存的QR码图像的URL(
imageUrl)。 此URL是使用当前HTTP请求的方案、主机和路径基构建的,确保用户可以访问并查看。 - 构建的URL保存在
ViewBag.QrCodeUri中。
视图返回
- 返回相同的视图(
View()),可能向用户显示QR码图像和解码的文本。ViewBag用于将QR码的解码文本和图像的URL传递给视图以进行渲染。
向控制器类添加视图
新建一个视图,右键单击QrCodeController类中的CreateQRCode动作方法。

选择"添加视图"选项,然后选择"Razor视图"。 点击"添加"。

然后选择先前生成的"创建"模板和模型类。

现在用下面显示的代码替换视图类中的代码。
@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">
<label for="QRCodeImage">Select QR Image:</label>
<input asp-for="QRCodeImage" class="form-control" type="file" />
</div>
<div class="form-group">
<input type="submit" value="Upload" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
@if (ViewBag.QrCodeUri != null)
{
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
}
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}现在在Program.cs中更改以下代码,将以上视图作为默认路由:
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");这将默认路由从HomeController更改为我们的QrCode控制器。
输入带有URL的图像:https://ironsoftware.com/csharp/qr/。

输出

在页面上,选择一个QR码图像并点击上传以解码QR码。 此应用程序还可以修改为从视频源读取并显示结果。
步骤4:读取高级QR码
要读取高级QR码,IronQR提供以下设置。
// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
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
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);// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
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
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);通过利用最新的ML技术,我们将QR码阅读器提升到新高度。 先进的ML模型提高了应用程序在复杂条件下解码QR码的准确性和效率。 无论是从静态图像、视频流还是实时摄像头读取QR码,ML驱动的解决方案都能快速可靠地提供所需信息。 这种创新简化了数据检索,并通过识别真正的QR码和标记潜在威胁来增强安全性。 使用我们的ML技术,您可以确信您的QR码扫描能力处于前沿,并为用户提供顺畅和安全的体验
许可(提供试用)
开发人员可以在这里获得IronQR试用许可证。 Key需要放置在appSettings.json中。
{
"IronQR.License.LicenseKey": "My Key"
}结论
在这篇文章中,我们探讨了如何使用IronQR在ASP.NET Core中扫描QR码。 将IronQR集成到ASP.NET应用程序中进行QR码扫描是一个简便的过程,可增强Web应用程序的功能,使其更具互动性和用户友好。 IronQR强大的功能和易用性使其成为开发者想要实现条码相关功能的绝佳选择。
常见问题解答
如何在ASP.NET应用程序中实现二维码扫描器?
要在ASP.NET应用程序中实现二维码扫描器,首先在Visual Studio中创建一个新项目,通过包管理器安装IronQR库,并添加代码处理使用IronQR强大功能进行二维码扫描。
在ASP.NET中设置QRCodeModel的步骤是哪些?
在ASP.NET中设置QRCodeModel,定义处理二维码数据的模型类,使用IronQR处理输入,并确保ASP.NET应用程序可以管理二维码扫描和结果显示。
IronQR可以读取不同图像格式的二维码吗?
是的,IronQR可以从多种图像格式读取二维码,包括jpg, png, svg, bmp, gif, tif, tiff和多页图像,使其在各种应用中具有通用性。
IronQR如何利用机器学习进行二维码扫描?
IronQR采用先进的机器学习模型来提高二维码扫描的准确性,确保在不同环境和平台中可靠而精确地读取。
我可以使用什么平台进行IronQR的二维码扫描?
IronQR支持广泛的平台包括Web应用程序(Blazor & WebForms), 手机应用(Xamarin & MAUI), 桌面应用(WPF & MAUI), 和控制台应用程序,兼容C#, F#, 和VB.NET。
如何在ASP.NET中处理二维码扫描的文件上传?
在ASP.NET中,通过设置一个控制器接收文件来管理二维码扫描的文件上传,然后使用IronQR有效地处理和扫描上传的二维码图像。
IronQR可以从视频流中扫描二维码吗?
是的,IronQR可以调整为从视频流中扫描二维码,扩展其在需要实时数据处理的动态环境中的应用。
IronQR有什么许可选项?
IronQR提供可从Iron Software网站获得的试用许可。开发者应将许可证密钥放在appSettings.json文件中以激活试用。
在ASP.NET中使用IronQR进行二维码扫描有哪些好处?
在ASP.NET中使用IronQR进行二维码扫描的好处包括易于集成,支持多种图像格式,机器学习增强的准确性以及跨平台兼容性。
如何在ASP.NET中使用IronQR自定义二维码创建?
要在ASP.NET中使用IronQR自定义二维码创建,利用库的功能修改二维码大小、颜色和嵌入数据,根据特定的应用需求定制输出。






