在C#中读取条形码

This article was translated from English: Does it need improvement?
Translated
View the article in English

弗兰克·沃克

IronBarcode 提供了一种多功能的、先进的且高效的库,用于在 .NET 中读取条形码。

安装

立即在您的项目中开始使用IronBarcode,并享受免费试用。

第一步:
green arrow pointer

IronBarcode 提供了一种多功能的、先进的且高效的库,用于在 .NET 中读取条形码。

第一步是安装IronBarcode,最简单的方法是使用我们的NuGet包,虽然您也可以选择手动安装。 DLL 到项目或全局程序集缓存中。 IronBarcode可以很好地生成一个C#条形码扫描器应用程序。

Install-Package BarCode

读取您的第一个条形码

在 .NET 中使用 IronBarcode 类库与 .NET Barcode Reader 读取条形码或二维码变得非常简单。 在我们的第一个例子中,我们可以看到如何用一行代码读取这个Barcode。

使用 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
VB   C#

努力加油并具体说明

在下一个示例中,我们将添加条形码扫描选项以读取复杂的图像。 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)
VB   C#

它将读取这个倾斜的 QR 码:

用 C# 扫描旋转 45 度的 QR 码

在我们的示例中,您可以看到我们可以指定条形码编码(s)我们正在寻找一种或多种格式。 这样做极大地提高了条形码读取的性能和准确性。 "(《世界人权宣言》) pipe character, or 'Bitwise OR,' is used to specify multiple formats simultaneously.

如果我们继续并使用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)
VB   C#

读取多个条形码

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
VB   C#

我们在不同的页面上发现了以下条形码。

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
VB   C#

多线程

要读取多个文档,我们可以通过创建文档列表并使用IronBarcode来获得更好的结果。 BarcodeReader.Read 方法。 这利用了多线程以及您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)
VB   C#

摘要

总之,IronBarcode 是一个多功能的 .NET 软件库和 C# 二维码生成器,能够读取多种条码格式。 无论条形码是完美的屏幕截图还是不完美的现实世界图像(如照片或扫描件),它都可以识别。

进一步阅读

要了解有关使用IronBarcode的更多信息,您可能希望浏览本节中的其他教程,以及我们主页上的示例,大多数开发人员会发现这些内容足以入门。

我们的API文档特别是 BarcodeReader 类和 BarcodeEncoding 枚举,将详细介绍您可以使用此 C# 条形码库 实现的功能。

源代码下载

我们也强烈建议您下载此教程并自己运行。 您可以通过下载源代码或在GitHub上fork我们来实现。 此 .NET 条形码读取器教程的源代码可作为使用 C# 编写的 Visual Studio 2017 控制台应用程序项目获取。

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

弗兰克·沃克

.NET 产品开发者

弗兰克一直是IronBarcode开发的创始力量。在过去的一年里,弗兰克在IronOCR工作,对在OCR中为IronBarcode构建用例方面起到了重要作用,使其成为现在的工具。