跳至頁尾內容
使用 IRONQR
如何在 ASP.NET 中掃描二維碼

如何在 ASP.NET 中掃描二維碼

二維碼在我們的數位世界中已經無所不在,經常用於廣告、零售、活動管理等領域。 對於使用 ASP.NET 框架的開發人員來說,將二維碼掃描功能整合到 Web 應用程式中可以增強使用者體驗和功能。 本文探討了在 ASP.NET 應用程式中實作二維碼掃描器的過程,涵蓋了所需的工具、函式庫和逐步實作方法。 我們將使用IronQR (Iron Software出品的強大二維碼產生庫)來讀取二維碼。

如何在 ASP.NET 中掃描二維碼

  1. 使用 Visual Studio 建立一個 ASP.NET 專案。
  2. 從軟體套件管理器安裝IronQR庫。
  3. 上傳二維碼圖片並讀取二維碼。
  4. 讀取高級二維碼。

了解二維碼及其應用案例

二維碼(快速回應碼)是二維條碼,可以儲存從網址到聯絡資訊等各種訊息,通常使用智慧型手機或專用掃描設備進行掃描。 在網路應用中,二維碼可以用於多種用途,例如:

*快速存取網站:*無需輸入即可將使用者引導至特定 URL。 活動票務:驗證門票上的二維碼以確認是否可進入活動現場。 支付系統:透過掃描二維碼實現便利支付。 產品資訊:**提供更多有關產品的資訊。

隆重推出 IronQR

IronQR是一個功能強大的 .NET 函式庫,專為二維碼產生和掃描而設計,在提供強大功能的同時,也兼顧了易用性。 這個功能強大的函式庫不僅可以處理二維碼,還可以管理其他類型的條碼,因此成為 .NET 生態系統中開發人員的首選。 在這裡,我們將探討如何將 IronQR 函式庫整合到 ASP.NET 應用程式中,以方便二維碼掃描。

IronQR 的主要優勢和特點

1.讀取二維碼: IronQR可以讀取各種影像格式的二維碼,包括 jpg、png、svg、bmp、gif、tif、tiff 等。 它還支援多頁圖像和自訂二維碼檢測模型。 輸出資料格式包括文字、URL、座標等。

2.編寫二維碼:您可以產生二維碼並將其儲存為圖像(jpg、png、gif、tiff、bmp)、串流,甚至可以將其添加到現有的 PDF 中。 對文字、網址、位元組和數字等資料進行編碼,並產生二維碼。 透過調整大小、調整邊距、重新著色和添加徽標來自訂二維碼樣式。

3.錯誤處理與修正: IronQR提供詳細的錯誤訊息和自訂 QR 錯誤修正。 它能確保容錯性,並支援空值檢查和校驗和。

4.先進的機器學習模型: IronQR使用先進的機器學習模型進行二維碼辨識。 此模型可確保在各種平台上(包括行動裝置、桌面裝置和雲端環境)準確可靠地讀取二維碼。

5.跨平台相容性: IronQR專為 C#、F# 和 VB.NET 設計,可在各種 .NET 版本上運行,例如 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)、.NET Framework(4.6.2+)。

  1. 它支援不同的專案類型,包括 Web(Blazor 和 WebForms)、行動裝置(Xamarin 和 MAUI)、桌面(WPF 和 MAUI)和控制台應用程式。

7.廣泛的二維碼支援: IronQR 擅長處理各種二維碼和其他類型的條碼。 無論您處理的是標準二維碼、微型二維碼、二維碼條碼影像,甚至是 Aztec 或 Data Matrix 等特定格式, IronQR都能滿足您的需求。 IronQR 也支援讀取二維碼條碼的功能。

IronQR的 .NET API 產品,包括各種辦公室文件工具、PDF 編輯工具、OCR 工具等等。

步驟 1:使用 Visual Studio 建立一個新的 ASP.NET 項目

首先建立一個新項目,然後選擇 MVC 模板,如下所示:

如何在 ASP.NET 中掃描二維碼:圖 1 - 使用 Visual Studio 建立一個新的 ASP.NET 項目

接下來,您應該提供項目名稱和項目地點。

如何在 ASP.NET 中掃描二維碼:圖 2 - 提供項目名稱和要儲存的位置。

選擇.NET版本。

如何在 ASP.NET 中掃描二維碼:圖 3 - 選擇要使用的 .NET 版本。

點擊建立按鈕將建立以下程式碼和項目。

如何在 ASP.NET 中掃描二維碼:圖 4 - 點選 Visual Studio 的"建立"按鈕,即可獲得專案範本。

步驟 2:從 Visual Studio 套件管理器安裝 IronQR 庫

請依照下列步驟,從 Visual Studio 套件管理器安裝IronQR庫:

如何在 ASP.NET 中掃描二維碼:圖 5 - 使用 Visual Studio 套件管理器搜尋 IronQR 並安裝它

IronQR也可以使用NuGet套件管理器來安裝。

如何在 ASP.NET 中掃描二維碼:圖 6 - 透過 NuGet 套件管理器搜尋 IronQR

步驟 3:上傳二維碼圖像並讀取二維碼圖像

現在,讓我們建立一個二維碼應用程式。

建立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; }
    }
}
$vbLabelText   $csharpLabel

建立二維碼控制器

新增控制器,方法是右鍵單擊控制器資料夾,並提供如下所示的名稱:

如何在 ASP.NET 中掃描二維碼:圖 7 - 按一下資料夾新增控制器並為其命名

選擇空控制器。

如何在 ASP.NET 中掃描二維碼:圖 8 - 點選提示方塊中的"空控制器"

請提供控制器名稱。

如何在 ASP.NET 中掃描二維碼:圖 9 - 命名控制器

現在將以下程式碼新增至控制器。

// 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();
        }
    }
}
$vbLabelText   $csharpLabel

程式碼解釋

提供的程式碼片段是一個名為QrCodeController的 ASP.NET Core MVC 控制器,它使用 IronQR 函式庫來處理二維碼掃描功能。 以下是這段程式碼功能的簡要描述:

1. 儲存上傳的二維碼圖像

路徑建設

  • 它會在應用程式的 Web 根目錄中建立一個專門用於保存二維碼影像的檔案路徑("ScanQRCode"目錄)。
  • 它會檢查該目錄是否存在,如果不存在,則會建立該目錄,以避免在儲存檔案時出現檔案未找到錯誤。

文件保存

  • 它會建立上傳的二維碼圖像將保存的完整檔案路徑( filePath )("ScanQRCode/qrcode.png")。 這將覆蓋任何同名的現有文件,從而有效地處理新的掃描,而不會累積文件。
  • 它開啟一個檔案流,並將上傳的映像( qrImage.QRCodeImage ,很可能是表單檔案)的內容複製到伺服器上的指定位置。

2. 解碼二維碼

讀取圖像文件

  • 使用AnyBitmap.FromFile(filePath)將已儲存的影像檔案載入為適合二維碼掃描的格式。 AnyBitmap很可能是一個輔助類,用於將影像檔案轉換為 QR 閱讀器可以處理的點陣圖物件。

初始化二維碼閱讀器

  • 將載入的點陣圖封裝到QrImageInput中,該 QrImageInput 專門設計用於作為 QR 碼讀取過程的輸入。
  • 實例化QrReader ,它是 IronQR 庫的一個元件,配置為檢測和解碼二維碼。

掃描二維碼

  • 呼叫reader.Read(imageInput)掃描影像中的二維碼。 此方法傳回一個IEnumerable<QrResult>其中每個QrResult包含從影像中偵測到的二維碼所取得的資料。
  • 它使用results.First().Value提取第一個結果的值,並將解碼後的資訊儲存在ViewBag.QrCodeText中。 這假設影像中至少包含一個二維碼,並且無法處理未偵測到二維碼的潛在錯誤。

3. 準備並提交答复

圖片 URL 建構

  • 建構一個指向伺服器上儲存的二維碼圖像的 URL( imageUrl )。 該 URL 使用當前 HTTP 請求的協定、主機和路徑基址構建,確保使用者可以存取並查看。
  • 產生的 URL 保存在ViewBag.QrCodeUri中。

查看返回

  • 傳回相同的視圖( View() ),該視圖可能會向使用者顯示二維碼圖像和解碼後的文字。 ViewBag用於將二維碼的解碼文字和圖像的 URL 傳遞給視圖進行渲染。

將視圖新增至控制器類

新增視圖,右鍵點選QrCodeController類別中的CreateQRCode操作方法。

如何在 ASP.NET 中掃描二維碼:圖 10 - 在QrCodeController類別中新增視圖

選擇"新增視圖"選項,然後選擇"Razor視圖"。 點擊"新增"。

如何在 ASP.NET 中掃描二維碼:圖 11 - 選擇"新增視圖"選項,然後選擇"Razor 視圖",再選擇"新增"。

然後選擇之前產生的"創建"模板和模型類別。

如何在 ASP.NET 中掃描二維碼:圖 12 - 選擇先前產生的建立模板

現在將視圖類別中的程式碼替換為下面所示的程式碼。

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

這將預設路由從HomeController更改為我們的QrCode控制器。

輸入圖片(需提供URL):https://ironsoftware.com/csharp/qr/

如何在 ASP.NET 中掃描二維碼:圖 13 - 二維碼輸入範例

輸出

如何在 ASP.NET 中掃描二維碼:圖 14 - 依照上述步驟操作後的範例輸出

在頁面上,選擇二維碼圖像,然後點擊上傳以解碼二維碼。 該應用程式還可以進行修改,以讀取視訊串流並顯示結果。

步驟 4:讀取高階二維碼

為了讀取高級二維碼,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);
$vbLabelText   $csharpLabel

透過利用最新的機器學習技術,我們將二維碼閱讀器提升到了新的高度。 即使在複雜條件下,先進的機器學習模型也能提高應用程式解碼二維碼的準確性和效率。 無論是從靜態影像、視訊串流或即時相機畫面中讀取二維碼,這款基於機器學習的解決方案都能快速可靠地提供所需資訊。 這項創新透過識別真正的二維碼並標記潛在威脅,簡化了資料檢索並提高了安全性。 借助我們的機器學習技術,您可以確信您的二維碼掃描功能處於領先地位,為您的用戶提供流暢安全的體驗。

許可證(提供試用版)

開發者可以從這裡取得 IronQR 試用許可證。 需要將金鑰放置在appSettings.json檔案中。

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

結論

在本文中,我們探討如何使用IronQR在 ASP.NET Core 中掃描二維碼。 將IronQR整合到 ASP.NET 應用程式中進行二維碼掃描是一個簡單的過程,它增強了 Web 應用程式的功能,使其更具互動性和使用者友善性。 IronQR的強大功能和易用性使其成為希望實現條碼相關功能的開發人員的絕佳選擇。

常見問題解答

如何在 ASP.NET 應用程式中實作二維碼掃描器?

要在 ASP.NET 應用程式中實現二維碼掃描器,首先在 Visual Studio 中建立一個新項目,透過套件管理器安裝 IronQR 庫,然後添加程式碼以使用 IronQR 的強大功能處理二維碼掃描。

在 ASP.NET 中設定 QRCodeModel 的步驟是什麼?

要在 ASP.NET 中設定 QRCodeModel,請定義一個模型類別來處理 QR 碼數據,使用 IronQR 處理輸入,並確保您的 ASP.NET 應用程式可以管理 QR 碼掃描和結果顯示。

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 進行二維碼掃描具有許多優勢,例如易於整合、支援各種影像格式、機器學習增強的準確性以及跨平台相容性。

如何使用 IronQR 在 ASP.NET 中自訂二維碼產生?

要使用 IronQR 在 ASP.NET 中自訂 QR 碼創建,請使用該庫的功能來修改 QR 碼的大小、顏色和嵌入數據,從而根據特定應用程式的要求自訂輸出。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。