在C# 中读取条形码

.NET软件工程师 对许多人来说,这是从.NET生成PDF文件的最有效方式,因为无需学习额外的API或复杂的设计系统。
弗兰克·沃克
2018年十一月4日
更新 2024年十二月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 读取条形码或二维码变得非常简单。 在我们的第一个例子中,我们可以看到如何用一行代码读取这个Barcode。

Code128 条形码图像,使用 C# 扫描

我们可以提取其值、其图像、其编码类型、以及其二进制数据(如果有的话),然后我们可以将其输出到控制台。

: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 度的二维码

在我们的示例中,您可以看到我们可以指定我们正在寻找的条码编码,甚至是多种格式。 这样做极大地提高了条形码读取的性能和准确性。 该 管道字符或“按位或”用于同时指定多种格式。

如果我们继续并使用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读取条形码的结果

扫描TIFF文件

在下一个示例中,我们可以看到,同样的结果可以通过多帧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上fork我们来实现。 此 .NET 条形码读取器教程的源代码可作为使用 C# 编写的 Visual Studio 2017 控制台应用程序项目获取。

.NET软件工程师 对许多人来说,这是从.NET生成PDF文件的最有效方式,因为无需学习额外的API或复杂的设计系统。
.NET 产品开发者

Frank 一直是 IronBarcode 发展的创始力量。在过去的一年里,Frank 一直在与 IronOCR 合作,在 OCR 中构建 IronBarcode 的使用案例,对其现在的发展起到了重要作用。