如何在 C# 中从图像读取条形码

如何使用 C# 从图像中读取条形码

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

IronBarcode 的一个关键特性是它能够开箱即用地读取多种图像格式的条形码。 IronBarcode目前支持以下图像格式:

  • 可缩放矢量图形 (SVG)
  • 联合图像专家组 (JPEG)
  • 便携式网络图形 (PNG)
  • 图形交换格式 (GIF)
  • 标签图像文件格式 (TIFF) 位图图像文件(BMP)

This is made possible with the help of our open source library, IronDrawing.

快速入门:几秒钟内从图像中读取条形码

只需简单调用一次 IronBarCode.BarcodeReader.Read(),即可直接从 PNG、JPEG、GIF、BMP 和 TIFF 等图像文件格式中提取条形码数据。 立即开始使用——无需复杂设置,即可立即见效。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronBarcode

    PM > Install-Package BarCode

  2. 复制并运行这段代码。

    var results = IronBarCode.BarcodeReader.Read("path/to/image.png");
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronBarcode,免费试用!
    arrow pointer

直接从图像中读取条形码

现在,让我们来看看如何实际使用 IronBarcode 进行条形码读取:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$vbLabelText   $csharpLabel
QRcodeintro related to 直接从图像中读取条形码
样品测试二维码
Code128intro related to 直接从图像中读取条形码
样品测试条形码

想知道样品中的条形码值是什么吗?试试这段代码片段吧!

要使用 IronBarcode,首先需要做的是通过 Microsoft Visual Studio NuGet 包管理器将 IronBarcode 库安装到您的项目中,如下图所示。 这将允许您访问 IronBarcode 的BarcodeReader.Read()方法,直接读取条形码图像。

IronBarcode 提供了简单易用的功能,用户只需使用BarcodeReader.Read()即可读取项目中已包含的图像文件,只需将文件名字符串或文件路径字符串作为该方法的参数即可。 最佳实践是在方法中指定文件路径时使用字符串字面量"@",以避免在文件路径字符串中添加多个转义字符"\"。

BarcodeReader.Read()方法调用的末尾附加Values()方法,以将条形码值作为System.String[]对象获取。

要将结果输出到控制台,可以使用foreach循环遍历存储在string[]数组中的值,并在循环块内调用Console.WriteLine()方法,并将迭代器变量作为参数。

IronBarcode 能够读取各种图像格式的一维条形码格式(Codabar、Code128、Code39、Code93、EAN13、EAN18、ITF、MSI、UPCA、UPCE)以及二维条形码格式(Aztec、DataMatrix、QRCode)。

条形码阅读器选项设置

条形码读取速度太慢? 图片中的条形码是否太小,导致 IronBarcode 无法读取? 只想读取图像的特定区域? 想从包含多种条形码的图像中只读取特定类型的条形码吗? 想要提高整体阅读性能吗? 别再担心了!

BarcodeReaderOptions允许用户调整条形码阅读器的行为,以便解决上述所有问题。 让我们逐一详细了解和讨论BarcodeReaderOptions中所有可调节的属性。

作物面积

CropAreaBarcodeReaderOptionsIron Software.Drawing.CropRectangle类型的一个属性,允许用户指定 IronBarcode 应该读取的图像区域。 这有助于提高读取性能,因为条形码读取器无需扫描整个图像来查找条形码,同时由于读取区域已指定,读取精度也得以提高。

要设置CropArea属性,只需实例化一个新的Rectangle类型对象,并将矩形的坐标、宽度和长度指定为参数即可。 所接受的测量单位是像素(px)。

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height);
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height);
' Example of setting CropArea
Dim cropArea = New IronSoftware.Drawing.Rectangle(x, y, width, height)
$vbLabelText   $csharpLabel

预期条形码类型

默认情况下,IronBarcode 中所有支持的条形码都会以图像形式扫描。 但是,如果用户知道图像中有哪些类型的条形码可用或想要读取哪些类型的条形码,则将此属性设置为仅读取某些类型的条形码将大大提高读取性能和准确性,因为条形码读取器不需要遍历条形码集合来解释和读取条形码。

要使用此属性,只需将ExpectBarcodeTypes设置为BarcodeEncoding枚举的某个字段即可。 以下是IronBarcode支持的每种条形码类型的示例。

以下是条形码类型列表,以及前面提供的示例和解释。

预期多个条形码

IronBarcode 默认会扫描图像中所有可用的条形码,包括扫描整个图像文件并将读取的条形码值添加到字符串数组中。 但是,如果用户不希望读取图像文件中的多个条形码,用户可以将此属性设置为false ,这样条形码读取器在找到条形码值后就会停止扫描。 这将再次提高 IronBarcode 的性能和读取速度。

图像滤镜

BarcodeReaderOptions可以添加的属性之一是图像过滤器集合。 图像滤波器对于预处理输入到 IronBarcode 的原始图像非常重要。 要应用BarcodeReaderOptions中的图像滤镜,用户必须首先初始化并指定要使用的ImageFilter集合。

最大并行线程数

IronBarcode 允许用户启用和调整并行线程执行的数量,从而提高处理速度和效率。 并行线程是指在不同的处理器核心上同时执行多个线程。 IronBarcode 中MaxParallelThread属性的默认值为 4。用户可以根据机器的性能和资源量进行调整。

多线程

该特性使 IronBarcode 能够并行读取多个图像。 Multithreaded的默认值为true ,因此会自动管理多个线程,以提高批量条形码读取任务的性能。

移除误报

此属性可消除所有误报的条形码读取结果。 假阳性条形码读取是指对条形码值的错误读取,但却被识别为有效。 这可能是由于排序过程中的错误,或是条形码标签或准备过程中的错误造成的。 因此,将RemoveFalsePositive设置为 true 将消除误报的条形码读数,从而提高条形码读取准确率。 但是,如果用户为了追求性能而牺牲准确性,则将此属性设置为false会有所帮助。此属性的默认值为true

扫描模式

定义 IronBarcode 如何扫描和检测图像中的条形码。

-自动:读取条形码时,会自动进行图像预处理,并配置最佳的读取器选项。 为获得最佳效果和性能,建议采用此方法。

  • OnlyDetectionModel :扫描图像中的条形码,并返回其位置的Iron Software.Drawing.PointF数组。 此模式无法读取检测到的条形码; 它只返回每个条形码的位置。
  • MachineLearningScan :使用机器学习检测扫描图像中的条形码并读取它们。
  • OnlyBasicScan :读取条形码,无需机器学习检测、自动图像预处理或读取器选项配置。 此选项可单独与 IronBarCode.Slim 一起使用。

阅读速度

顾名思义, "速度"属性使用户能够进一步优化 IronBarcode 阅读器的性能。 与RemoveFalsePositive属性类似,调整此属性会降低准确性,但会提高性能。 它接受ReadingSpeed枚举类型,该枚举类型有 4 个级别,如下所示:

-速度更快:可实现最快的条形码读取速度,但会降低准确性。 该过程跳过了图像预处理,经常导致条形码结果为空。 仅当输入图像清晰锐利时才使用此设置。 -平衡建议Speed属性设置为此模式。 它通过尝试对图像进行轻微处理,使条形码区域更加清晰,从而在准确性和读取性能之间取得平衡,使条形码读取器能够检测到它。 大多数情况下,这种设置足以让 IronBarcode 读取条形码图像并产生准确的输出。 -详细:如果使用ReadingSpeed.Balanced设置无法从读取中生成条形码值,用户可以选择使用ReadingSpeed.Detailed 。 IronBarcode 将对图像进行中等处理,以进一步清晰地显示条形码区域,以便条形码阅读器能够检测到条形码。 此设置对于检测较小或不太清晰的条形码图像非常有用。

  • ExtremeDetail :由于此设置会占用大量 CPU 资源,因此最不推荐使用。 将对条形码图像进行大量处理,以便阅读器能够读取条形码。 这将大大降低IronBarcode的读取性能。 建议用户在选择此设置之前,先对图像进行预处理/应用滤镜。

使用代码39扩展模式

此设置允许以扩展模式读取和解释 Code39 类型的条形码,其中将应用完整的 ASCII 字符集。 将UseCode39ExtendedMode设置为true将能够更准确地读取 Code39 条形码。

从图像读取高级条形码

现在我们已经了解了用户可以调整的所有选项,无论是为了提高性能还是准确性,让我们看看如何在代码中应用它们。 以下代码片段进行了演示。

// Insert actual C# code for advanced barcode reading from images here
// Ensure the necessary options and settings are demonstrated in the example
// Insert actual C# code for advanced barcode reading from images here
// Ensure the necessary options and settings are demonstrated in the example
' Insert actual C# code for advanced barcode reading from images here
' Ensure the necessary options and settings are demonstrated in the example
$vbLabelText   $csharpLabel

从代码片段中我们可以看出,要使用BarcodeReaderOptions我们必须先对其进行初始化,然后根据上面所述的属性确定并调整BarcodeReaderOptions的属性。 初始化后的BarcodeReaderOptions可以与图像文件一起作为参数传递给BarcodeReader.Read()方法。这样,在从图像中读取条形码时, BarcodeReaderOptions中的所有设置都会被应用。

常见问题解答

如何在 .NET 应用程序中从图像中读取条形码?

您可以使用 IronBarcode 的 BarcodeReader.Read() 方法从 JPEG、PNG、GIF、TIFF、SVG 和 BMP 等图像文件中读取条形码。

在 IronBarcode 中有哪些自定义条形码读取的选项?

BarcodeReaderOptions 类允许通过设置诸如 CropAreaExpectBarcodeTypesImageFiltersMaxParallelThreadsRemoveFalsePositive 等属性来自定义条形码读取。

如何提高我应用程序中的条形码读取准确性?

通过使用 RemoveFalsePositive 属性来消除误报,并使用诸如 Detailed 或 ExtremeDetail 之类的选项来调整读取速度,可以提高条形码读取的准确性。

在 .NET 中是否可以执行多线程条形码读取?

是的,IronBarcode 支持多线程条形码读取。您可以通过将 Multithreaded 属性设置为 true 来启用此功能,从而实现线程的自动管理。

如何指定图像区域以扫描条形码?

您可以通过在 IronBarcode 中的 BarcodeReaderOptions 类中设置 CropArea 属性来指定图像中的一个区域进行扫描。

使用机器学习在条形码读取中有哪些好处?

使用机器学习进行条形码检测可以通过适应各种图像条件和增强 IronBarcode 的识别能力来提高读取的准确性和效率。

如何在 IronBarcode 中处理不同的条形码格式?

IronBarcode 能够读取 1D 和 2D 条形码格式。您可以使用 ExpectBarcodeTypes 属性指定期望的条形码类型。

在 .NET 项目中安装条形码读取库的流程是什么?

要在 .NET 项目中安装 IronBarcode 库,请使用 Microsoft Visual Studio 中的 NuGet 包管理器下载并集成该库。

IronBarcode 中有哪些图像预处理选项?

IronBarcode 通过 ImageFilters 属性提供图像预处理选项,允许用户在读取条形码之前增强图像。

如何优化大型图像文件的条形码读取性能?

通过设置 MaxParallelThreads 来利用多个线程,并根据您的需要调整读取速度以优化性能。

Hairil Hasyimi Bin Omar
软件工程师
如所有伟大的工程师一般,Hairil 是个热心的学习者。他正在提高对 C#、Python 和 Java 的知识,并利用这些知识为 Iron Software 团队成员增值。Hairil 从马来西亚的玛拉工业大学加入 Iron Software 团队,获得化学与工艺工程学士学位。
准备开始了吗?
Nuget 下载 1,979,979 | Version: 2025.11 刚刚发布