使用IRONQR

如何在ASP .NET中扫描QR码

乔尔迪·巴尔迪亚
乔尔迪·巴尔迪亚
2024年六月6日
分享:

介绍

QR 码在我们的数字世界中已经无处不在,经常用于广告、零售、活动管理等领域。 对于在 ASP.NET Framework 中工作的开发人员来说,将二维码扫描功能集成到网络应用程序中可以增强用户体验和功能。 本文探讨了在 ASP.NET 应用程序中实施 QR 码扫描器的过程,包括所需的工具、库和逐步实施。 我们将使用IronQR,这是一个强大的QR码生成库,由Iron Software提供,用于读取QR码。

如何在ASP .NET中扫描QR码

  1. 使用 Visual Studio 创建 ASP.NET 项目

  2. 从包管理器安装IronQR

  3. 上传 QR 图像并阅读 QR。

  4. 读取高级二维码

了解 QR 码及其使用案例

QR(快速响应)码是二维条形码,可以存储从URL到联系信息的数据,通常使用智能手机或专用扫描设备进行扫描。 在网络应用程序中,QR 代码有多种用途,如

  • 快速网站访问:无需输入即可将用户引导至特定URL。
  • 活动票务:验证门票上的 QR 码以进入活动。
  • 支付系统:通过扫描QR码来简化支付。
  • 产品信息:提供关于产品的更多信息。

介绍 IronQR

IronQR 是一个强大的 .NET 库,专为二维码生成和扫描而设计,提供强大的功能并注重易用性。 这个多功能库不仅可以处理 QR 代码,还可以管理其他类型的 BarCode,因此成为在 .NET 生态系统内工作的开发人员的首选。 在此,我们将探讨如何将 IronQR 库集成到 ASP.NET 应用程序中,以方便 QR 码扫描。

IronQR 的主要优势和功能

  1. 读取二维码IronQR 可以读取来自各种图像格式的二维码,包括 jpg、png、svg、bmp、gif、tif、tiff 等。 它还支持多页图像和自定义 QR 检测模型。 输出数据格式包括文本、URL、坐标等。

  2. 生成二维码:您可以生成二维码并将其保存为图像(jpg、png、gif、tiff、bmp)、流,甚至将其印刻到现有的PDF上。 对文本、URL、字节和数字等数据进行编码,并生成 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+)。

  6. 它支持不同的项目类型,包括网络(Blazor 和 WebForms)、移动(Xamarin 和 MAUI)、桌面(WPF 和 MAUI)以及控制台应用程序。

  7. 广泛的QR码支持:IronQR擅长处理各种QR码及其他类型的条形码。 无论您是处理标准二维码、微型二维码、二维码条码图像,还是特定格式如Aztec或Data Matrix,IronQR 都能满足您的需求。 IronQR 还支持读取 QR 码 BarCode 的功能。

    IronQR 的 .NET API 产品,包括用于办公文档、PDF 编辑、OCR 等的各种工具。

步骤 1:使用 Visual Studio 创建一个新的 ASP.NET 项目

首先创建一个新项目并选择 MVC 模板,如下所示

如何在 ASP .NET 中扫描二维码:图1 - 使用 Visual Studio 创建一个新的 ASP.NET 项目

接下来,您应提供项目名称和项目地点。

如何在 ASP .NET 中扫描 QR 码:图 2 - 提供项目名称和您希望保存的位置。

选择 .NET 版本。

如何在 ASP.NET 中扫描二维码:图 3 - 选择您希望使用的 .NET 版本。

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

如何在 ASP .NET 中扫描 QR 码: 图 4 - 点击 Visual Studio 的创建按钮以获取项目模板

第 2 步:从 Visual Studio 软件包管理器安装 IronQR 库

从 Visual Studio 包管理器安装IronQR库,如下所示

如何在 ASP .NET 中扫描二维码:图 5 - 使用 Visual Studio 包管理器搜索 IronQR 并安装它

IronQR 也可以通过 NuGet 包管理器安装。

如何在 ASP .NET 中扫描 QR 码:图 6 - 通过 NuGet 包管理器搜索 IronQR

第 3 步:上传 QR 图像并读取 QR 图像

现在,让我们创建一个 QR 码应用程序。

创建QrCode模型

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
$vbLabelText   $csharpLabel

创建 QR 码控制器

右键单击控制器文件夹并提供如下所示的名称,添加一个新控制器:

如何在 ASP .NET 中扫描 QR 码:图 7 - 通过点击文件夹添加一个新控制器并为其命名

选择空控制器。

如何在ASP .NET中扫描二维码:图8 - 在提示中点击空控制器

提供控制器名称。

如何在 ASP .NET 中扫描二维码:图 9 - 为控制器命名

现在将以下代码添加到控制器中。

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
$vbLabelText   $csharpLabel

代码解释

所提供的代码片段用于名为 QrCodeController 的 ASP.NET Core MVC 控制器,该控制器旨在使用 IronQR 库处理二维码扫描功能。 以下是代码作用的简要说明:

1.保存上传的二维码图像

路径构建

它在应用程序的Web根目录中构建一个文件路径(path),专门用于保存二维码图像("ScanQRCode"目录)。

它将检查该目录是否存在,如果不存在,则创建该目录,以避免在保存文件时出现找不到文件的错误。

文件保存

它构建完整的文件路径(filePath),用于保存上传的二维码图像(“ScanQRCode/qrcode.png”)。 这将覆盖同名的任何现有文件,有效处理新扫描,而不会累积文件。

它打开一个文件流,并将上传的图像(qrImage.QRCodeImage,可能是一个表单文件)的内容复制到服务器上的指定位置。

2.解码 QR 码

阅读图像文件

使用 AnyBitmap.FromFile(filePath) 将保存的图像文件加载到适合 QR 码扫描的格式。 AnyBitmap可能作为助手类,将图像文件转换为QR读取器可以处理的位图对象。

初始化 QR 阅读器

将加载的位图包装到QrImageInput中,该框架特别设计为QR代码读取过程的输入。 实例化一个QrReader,这是IronQR库的一个组件,用于检测和解码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()),这可能会向用户显示二维码图像和解码文本。 使用ViewBag将QR码的解码文本和图像的URL传递到视图进行呈现。

在控制器类中添加视图

为新的视图添加,右键单击QrCodeController类中的CreateQRCode操作方法。

如何在 ASP .NET 中扫描 QR 码:图 10 - 在 `QrCodeController` 类中添加一个新视图

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

如何在 ASP .NET 中扫描 QR 码:图 11 - 选择“添加视图”选项,然后选择“Razor 视图”,然后点击“添加”

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

如何在 ASP .NET 中扫描二维码:图 12 - 选择之前生成的 Create 模板

现在将视图类中的代码替换为下图所示的代码。

@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
$vbLabelText   $csharpLabel

现在在 program.cs 中修改以下代码,将上述视图设为默认路径

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}")
$vbLabelText   $csharpLabel

这将默认路由从HomeController更改为我们的QrCode控制器。

输入图像的URL:https://ironsoftware.com/csharp/qr/

如何在 ASP .NET 中扫描 QR 码:图 13 - 示例 QR 码输入

输出

如何在 ASP .NET 中扫描 QR 码:图 14 - 按照上面的步骤操作后的示例输出

在页面上选择一个 QR 代码图像,然后点击上传以解码 QR 代码。 此应用程序也可修改为从视频源读取并显示结果。

步骤 4:阅读高级 QR 代码

要读取高级 QR 代码,IronQR 提供以下设置。

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)
$vbLabelText   $csharpLabel

通过利用最新的 ML 技术,我们将 QR 码阅读器提升到了新的高度。 即使在复杂的条件下,复杂的 ML 模型也能提高应用程序解码 QR 代码的准确性和效率。 无论是从静态图像、视频流还是实时摄像机画面中读取 QR 码,由 ML 驱动的解决方案都能快速、可靠地提供所需的信息。 这项创新通过识别真实 QR 代码和标记潜在威胁,简化了数据检索并提高了安全性。 有了我们的 ML 技术,您可以确信您的二维码扫描功能处于最前沿,为您的用户提供流畅、安全的体验。

许可证(可试用)

开发人员可以通过此处获取IronQR试用许可证。 密钥需要放在 appSettings.json 中。

{
  "IronQR.License.LicenseKey": "My key"
}

结论

在本文中,我们探讨了如何在 ASP.NET Core 中使用 IronQR 扫描二维码。 将IronQR集成到ASP.NET应用程序中用于二维码扫描是一个简单的过程,可以增强Web应用程序的功能,使其更加互动且用户友好。 IronQR 强大的功能和易用性使其成为希望实现条码相关功能的开发人员的绝佳选择。

乔尔迪·巴尔迪亚
乔尔迪·巴尔迪亚
软件工程师
Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 运用技能时,他会进行游戏编程。作为产品测试、产品开发和研究的负责人之一,Jordi 为持续的产品改进增添了极大的价值。多样化的经验让他充满挑战和参与感,他说这是他在 Iron Software 工作中最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。
< 前一页
如何在ASP .NET Core中生成QR码
下一步 >
如何在C#中扫描QR码

准备开始了吗? 版本: 2025.4 刚刚发布

查看许可证 >