在 C# 中讀取條碼

.NET軟體工程師 對很多人來說,這是從 .NET 生成 PDF 文件的最有效方法,因為不需要學習額外的 API 或導航複雜的設計系統
法蘭克·沃克
2018年11月4日
已更新 2024年12月10日
分享:
This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode提供了一個多功能、先進且高效的庫,用於在.NET中讀取條碼。

安裝

立即在您的專案中使用IronBarcode,並享受免費試用。

第一步:
green arrow pointer

IronBarcode提供了一個多功能、先進且高效的庫,用於在.NET中讀取條碼。

第一步是安裝 Iron Barcode,最簡便的方法是使用我們的 NuGet 套件,您也可以選擇手動將 DLL 安裝到您的專案或全局組件快取中。 IronBarcode 很適合用來製作 C# 條碼掃描器應用程式。

Install-Package BarCode

讀取您的第一個條碼

在 .NET 中使用 IronBarcode 類庫和 .NET Barcode Reader 來讀取條碼或 QR Code 非常簡單。 在我們的第一個例子中,我們可以看到如何用一行程式碼讀取這個條碼。

使用 C# 掃描的 Code128 條碼圖像

我們可以提取其值、其圖像、其編碼類型、其二進位資料(如果有的話),然後將其輸出到控制台。

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-1.cs
using IronBarCode;
using System;

// Read barcode
BarcodeResults results = BarcodeReader.Read("GetStarted.png");

// Log the result to Console Window
foreach (BarcodeResult result in results)
{
    if (result != null)
    {
        Console.WriteLine("GetStarted was a success. Read Value: " + result.Text);
    }
}
Imports IronBarCode
Imports System

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("GetStarted.png")

' Log the result to Console Window
For Each result As BarcodeResult In results
	If result IsNot Nothing Then
		Console.WriteLine("GetStarted was a success. Read Value: " & result.Text)
	End If
Next result
$vbLabelText   $csharpLabel

努力更專注和具體化

在下一個範例中,我們將添加條碼掃描選項來讀取一個具挑戰性的圖像。 Speed 枚舉的 ExtremeDetail 值允許對可能被遮擋、損壞或成斜角的條碼進行更深入的掃描。

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-2.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose a speed from: Faster, Balanced, Detailed, ExtremeDetail
    // There is a tradeoff in performance as more Detail is set
    Speed = ReadingSpeed.ExtremeDetail,

    // By default, all barcode formats are scanned for.
    // Specifying one or more, performance will increase.
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
};

// Read barcode
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.Speed = ReadingSpeed.ExtremeDetail,
	.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)
$vbLabelText   $csharpLabel

這將讀取這個傾斜的 QR 碼:

使用 C# 扫描旋轉45度的 QR 代码

在我們的範例中,您可以看到我們可以指定我們正在尋找的條碼編碼,甚至是多種格式。 這樣做可以大幅提高條碼讀取的性能和準確性。 該 管道符號,或稱為「位元或」,用於同時指定多種格式。

如果我們繼續使用ImageFiltersAutoRotate屬性,可以達到相同的效果,但具更高的特定性。

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-3.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection() {
        new AdaptiveThresholdFilter(),
    },

    // Uses machine learning to auto rotate the barcode
    AutoRotate = true,
};

// Read barcode
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection() From {New AdaptiveThresholdFilter()},
	.AutoRotate = True
}

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)
$vbLabelText   $csharpLabel

讀取多個條碼

PDF 文件

在我們的下一個範例中,我們將查看如何透過幾行程式碼來讀取掃描的 PDF 文件並找出所有一維格式的條碼。

如您所見,這與從單個文件中讀取單個條碼非常相似,只是我們現在有了關於找到條碼所在頁碼的新信息。

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-4.cs
using IronBarCode;
using System;

// Multiple barcodes may be scanned up from a single document or image. A PDF document may also used as the input image
BarcodeResults results = BarcodeReader.ReadPdf("MultipleBarcodes.pdf");

// Work with the results
foreach (var pageResult in results)
{
    string Value = pageResult.Value;
    int PageNum = pageResult.PageNumber;
    System.Drawing.Bitmap Img = pageResult.BarcodeImage;
    BarcodeEncoding BarcodeType = pageResult.BarcodeType;
    byte[] Binary = pageResult.BinaryValue;
    Console.WriteLine(pageResult.Value + " on page " + PageNum);
}
Imports IronBarCode
Imports System

' Multiple barcodes may be scanned up from a single document or image. A PDF document may also used as the input image
Private results As BarcodeResults = BarcodeReader.ReadPdf("MultipleBarcodes.pdf")

' Work with the results
For Each pageResult In results
	Dim Value As String = pageResult.Value
	Dim PageNum As Integer = pageResult.PageNumber
	Dim Img As System.Drawing.Bitmap = pageResult.BarcodeImage
	Dim BarcodeType As BarcodeEncoding = pageResult.BarcodeType
	Dim Binary() As Byte = pageResult.BinaryValue
	Console.WriteLine(pageResult.Value & " on page " & PageNum)
Next pageResult
$vbLabelText   $csharpLabel

我們在不同的頁面上發現以下條碼。

C# - 從 PDF 中讀取條碼的結果

掃描 TIFFs

在我們的下一個例子中,我們可以看出,可以從多幀TIFF中獲得相同的結果,在此情境下這將類似於PDF處理。

C# - 從多幀TIFF圖像中讀取條碼
:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-5.cs
using IronBarCode;

// Multi frame TIFF and GIF images can also be scanned
BarcodeResults multiFrameResults = BarcodeReader.Read("Multiframe.tiff");

foreach (var pageResult in multiFrameResults)
{
    //...
}
Imports IronBarCode

' Multi frame TIFF and GIF images can also be scanned
Private multiFrameResults As BarcodeResults = BarcodeReader.Read("Multiframe.tiff")

For Each pageResult In multiFrameResults
	'...
Next pageResult
$vbLabelText   $csharpLabel

多執行緒

要讀取多個文件,我們可以透過建立文件清單並使用BarcodeReader.Read方法來從IronBarcode獲得更好的結果。 這利用多個執行緒並潛在地使用您 CPU 的所有核心進行條碼掃描過程,並且可能比一次讀取一個條碼快得多。

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-6.cs
using IronBarCode;

// The Multithreaded property allows for faster barcode scanning across multiple images or PDFs. All threads are automatically managed by IronBarCode.
var ListOfDocuments = new[] { "image1.png", "image2.JPG", "image3.pdf" };

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Enable multithreading
    Multithreaded = true,
};

BarcodeResults batchResults = BarcodeReader.Read(ListOfDocuments, options);
Imports IronBarCode

' The Multithreaded property allows for faster barcode scanning across multiple images or PDFs. All threads are automatically managed by IronBarCode.
Private ListOfDocuments = { "image1.png", "image2.JPG", "image3.pdf" }

Private options As New BarcodeReaderOptions() With {.Multithreaded = True}

Private batchResults As BarcodeResults = BarcodeReader.Read(ListOfDocuments, options)
$vbLabelText   $csharpLabel

摘要

總而言之,IronBarcode 是一個多功能的 .NET 軟體庫和 C# 二維碼生成器,能夠讀取多種條碼格式。 無論條碼是完美的螢幕截圖,還是不完美的現實世界圖像,例如照片或掃描,它都可以做到。

進一步閱讀

若想了解更多有關使用 IronBarcode 的資訊,您可以探索本部分中的其他教程,以及我們首頁上的示例,大多數開發人員會發現這些內容足以讓他們開始使用。

我們的API 參考文檔,特別是BarcodeReader類別和BarcodeEncoding枚舉,將提供有關使用此C# 條碼庫可以實現的詳細信息。

源代碼下載

我們也強烈建議您下載此教程並自行運行。 您可以透過下載源代碼或在 GitHub 上來分支我們來實現這一點。 此 .NET 條碼閱讀器教學的原始碼可作為使用 C# 編寫的 Visual Studio 2017 控制台應用程式專案使用。

.NET軟體工程師 對很多人來說,這是從 .NET 生成 PDF 文件的最有效方法,因為不需要學習額外的 API 或導航複雜的設計系統
.NET 產品開發人員

在 IronBarcode 的開發中,Frank 一直是創始力量。在過去的一年中,Frank 與 IronOCR 一起工作,對於在 OCR 中建立 IronBarcode 的使用案例具有影響力,並將其發展成為現在的工具。