C#从图像中读取条形码

您是否正在寻找一种以编程方式从图像中读取条形码或 QR 码的方法?如果您是开发人员,并且需要创建自己的条码阅读器应用程序?你来对地方了。条形码对于准确跟踪库存和产品从制造到销售点的交付至关重要。我们可以在.NET应用程序中轻松检测、识别和读取不同类型的条形码和二维码。在本文中,我们将通过几个简单的步骤向您展示如何使用 C# 从图像中读取条形码。您可以将本文用作开发条形码阅读器或扫描器应用程序的分步指南。

首先,我们将了解 C# 条码阅读器 API,以读取输入图像中可用的条码。接下来,我们将介绍如何从图像中检测、识别和提取条形码数据的步骤。您将找到详细的步骤和代码片段。最后,我们将提供有用的链接以进一步增强功能。让我们开始吧!

本文将涵盖以下主题:

  1. 从图像读取条码的 C# API
  2. 从图像中读取条形码的步骤
  3. 从位图中读取条码
  4. 使用流从图像中读取条码
  5. 如何读取特定类型的条码
  6. 从一张图片中读取多种类型的条码
  7. 检测并读取预定义的符号集
  8. 检测并读取图像中的多个条形码
  9. 获取条码的X和Y坐标 10.读取图片特定区域的条码
  10. 从图像的多个区域读取条码

用于从图像读取条形码的 C# API

为了从图像中读取条形码,我们将使用 Aspose.BarCode for .NET API。 API 允许生成、扫描和读取范围广泛的条形码符号。它可以渲染 JPEGTIFFPNGBMPGIF 格式的条码图像。

API 提供了 BarCodeReader 类,可以从给定图像中识别 60 多种不同的条形码类型。检测条形码的第一步是指定带有条形码的图像的来源。这可以是文件、位图对象或流。然后需要在 DecodeType 参数中指定目标符号。我们可以通过指定 DecodeType.AllSupportedTypes 查看所有不同类型的支持符号。此类的 ReadBarCodes() 方法返回一个已识别条码数组。 API的BarCodeResult类存储识别出的条码数据,如条码类型、条码文本、区域等参数。

API 还允许指定条形码阅读器应读取的图像区域。这可以使用 .NET Rectangle 对象来完成,并且允许避免在默认情况下不包含条码的图像区域中查找条码的需要。

下载 API 的 DLL 或使用 NuGet 安装它。

PM> Install-Package Aspose.BarCode 

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

我们可以按照以下步骤轻松地从图像中读取条形码:

  1. 首先,使用 BarCodeReader 类加载图像。
  2. 调用readBarCodes()方法,在BarCodeResult类对象中获取识别结果。
  3. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 从图像中读取条形码。

// 此代码示例演示如何从图像文件中读取条形码。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Sample.png");

// 读取条形码并显示结果
foreach(BarCodeResult result in reader.ReadBarCodes()) 
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
从图像中读取条形码。

从 C# 中的图像读取条形码。

C#从位图中读取条码

我们可以按照以下步骤轻松地从图像中读取条形码:

  1. 首先,使用 Bitmap 类加载图像。
  2. 接下来,使用 Bitmap 对象创建 BarCodeReader 类的实例。
  3. 调用 ReadBarCodes() 方法,在 BarCodeResult 类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例显示了如何在 C# 中从位图中读取条形码。

// 此代码示例演示如何从位图中读取条形码。
// 在位图中加载图像
Bitmap bmp = new Bitmap("C:\\Files\\BarCode\\Code128.jpg");

// 初始化条形码阅读器
BarCodeReader reader = new BarCodeReader(bmp);

// 读取指定区域中的所有条形码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
在 C# 中从位图图像读取条码。

在 C# 中从 Bitmap 读取条码。

在 C# 中使用 Stream 从图像中读取条码

我们还可以使用文件流加载条码图像并按照以下步骤读取条码:

  1. 首先,使用 FileStream 类加载图像。
  2. 接下来,使用流对象创建 BarCodeReader 类的实例。
  3. 调用 ReadBarCodes() 方法,在 BarCodeResult 类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何在 C# 中使用 Stream 从图像中读取条形码。

// 此代码示例演示如何使用文件流从图像中读取条形码。
// 载入图片
Stream stream = new FileStream("C:\\Files\\BarCode\\MultipleBarcodes.jpeg", FileMode.Open, FileAccess.Read);

// 初始化条形码阅读器
BarCodeReader reader = new BarCodeReader(stream);

// 读取指定区域中的所有条形码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}

C#从图像中读取特定类型的条码

建议选择将考虑进行识别的目标条码符号体系,以最大限度地减少完成识别所需的时间,并避免尝试识别过时的条码。

我们可以按照以下步骤指定目标条码类型并从图像中读取条码:

  1. 首先,使用 BarCodeReader 类加载图像。
  2. 接下来,设置条码解码类型,例如 Code39Standard。
  3. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 从图像中读取特定类型的条形码。

// 此代码示例演示如何从图像中读取特定解码类型的条形码。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.Code39Standard);

// 读取 Code39Extended 类型的条码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
从图像中识别特定类型的条码

在 C# 中从图像中识别特定类型的条形码。

C#读取图片中多种类型的条码

我们还可以按照以下步骤指定多种条形码类型:

  1. 首先,使用 BarCodeReader 类加载图像。
  2. 接下来,使用 SetBarCodeReadType() 方法设置条码解码类型。
  3. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 从图像中读取多种类型的条形码。

// 此代码示例演示如何从图像中读取多种解码类型的条形码。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png");
reader.SetBarCodeReadType(DecodeType.DataMatrix, DecodeType.QR, DecodeType.Code39Extended);

// 读取条形码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
C#读取图片中多种类型的条码

C#读取图片中多种类型的条码

我们还可以在 BarCodeReader 类的构造函数中指定多种解码类型,如下所示:

BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.DataMatrix, DecodeType.QR, DecodeType.Code39Extended);

在 C# 中从图像读取预定义的条码类型集

我们可以读取 DecodeTypes 类中定义的一组预定义的符号体系以进行识别。我们可以设置以下任何预定义集:

  • AllSupportedTypes - 所有支持的条形码类型
  • Types1D - 所有支持的一维符号
  • Types2D - 所有支持的二维符号
  • PostalTypes - 所有受支持的邮政符号体系,主要由邮政服务使用
  • MostCommonTypes - 定义了一组最广泛使用的条码标准

我们可以按照以下步骤指定预定义集:

  1. 首先,首先,使用 BarCodeReader 类加载图像。
  2. 接下来,在 BarCodeReader 构造函数或 SetBarCodeReadType 方法中设置条码解码类型,例如 DecodeType.Types2D。
  3. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 中预定义的一组符号来读取条形码。

// 此代码示例演示如何使用一组预定义的符号来读取条形码。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png", DecodeType.Types1D);

// 读取条形码并显示结果
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
在 C# 中从图像中读取预定义的条码类型集

在 C# 中从图像中读取预定义的条码类型集

在 C# 中从图像中读取多个条形码

我们还可以按照以下步骤从图像中读取所有可用的条形码:

  1. 首先,使用 BarCodeReader 类加载图像。
  2. 接下来,将条码解码类型设置为 ALLSUPPORTEDTYPES。
  3. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 从图像中读取多个条形码。

// 此代码示例演示如何从图像中读取条形码多个条形码。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png", DecodeType.AllSupportedTypes);

// 读取输入图像上可用的所有类型的条形码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
从图像中读取多个条形码。

从图像中读取多个条形码。

使用 C# 获取条形码的 X 和 Y 坐标

我们可以按照以下步骤从图像中读取检测到的条形码的 X 和 Y 坐标:

  1. 首先,使用 BarCodeReader 类加载图像。
  2. 接下来,使用 ReadBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
  3. 然后,遍历结果并检查 Region 是否不为空。
  4. 之后,使用 Points 获取条形码区域边界的 Points 数组。
  5. 最后,显示条形码的 X 和 Y 点。

以下代码示例显示了如何使用 C# 从图像中获取条形码的 X 和 Y 坐标点。

// 此代码示例演示如何从图像中读取条形码的 X 和 Y 区域点。
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.AllSupportedTypes);

// 读取条码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    if (result.Region != null)
    {
        // 显示检测到的所有条码的 x 和 y 坐标
        Point[] point = result.Region.Points;
        Console.Out.WriteLine("Top left coordinates: X = " + point[0].X + ", Y = " + point[0].Y);
        Console.Out.WriteLine("Bottom left coordinates: X = " + point[1].X + ", Y = " + point[1].Y);
        Console.Out.WriteLine("Bottom right coordinates: X = " + point[2].X + ", Y = " + point[2].Y);
        Console.Out.WriteLine("Top right coordinates: X = " + point[3].X + ", Y = " + point[3].Y);
    }
}
获取条码的 X 和 Y 坐标

从图像中获取条形码的 X 和 Y 坐标。

在 C# 中从图像的特定区域读取条形码

我们可以按照以下步骤从特定区域或图像区域读取条形码:

  1. 首先,使用位图方法读取图像文件的缓冲区数据。
  2. 接下来,创建 BarCodeReader 类的一个实例。它以图像、矩形区域和解码类型作为参数。
  3. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  4. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例展示了如何使用 C# 从图像的特定区域读取条形码。

从图像的特定区域读取条形码。

从 C# 中图像的特定区域读取条形码。

在 C# 中从图像的多个区域读取条形码

我们还可以按照以下步骤从图像的多个区域读取条形码:

  1. 首先,使用 Bitmap 类加载图像。
  2. 接下来,使用 Rectangle 类定义矩形。
  3. 然后,创建 BarCodeReader 类的实例。
  4. 同时,使用图像对象和矩形作为参数调用 SetBarCodeImage().
  5. 或者,使用 SetBarCodeReadType() 方法设置条码读取类型。
  6. 之后,使用ReadBarCodes()方法在BarCodeResult类对象中获取识别结果。
  7. 最后,遍历结果并显示条形码的类型和文本。

以下代码示例显示了如何使用 C# 从图像的多个区域读取条形码。

// 此代码示例演示如何从图像的特定区域读取条形码。
// 在位图中加载图像
Bitmap bmp = new Bitmap("C:\\Files\\BarCode\\MultipleBarcodes.png");

// 源图像中二维条码的矩形
Rectangle rect2D = new Rectangle(0, 0, 400, 200);

// 源图像中 Code128 条码的矩形
Rectangle rectCode128 = new Rectangle(450, 100, 600, 180);

// 初始化条形码阅读器
BarCodeReader reader = new BarCodeReader();
reader.SetBarCodeImage(bmp, new Rectangle[] { rect2D, rectCode128 });
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);

// 读取指定区域中的所有条形码
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
从图像的多个区域读取条形码。

从 C# 中的图像的多个区域读取条形码。

获得免费许可证

您可以 获得免费的临时许可证 来试用该库,而没有评估限制。

结论

在本文中,我们学习了如何:

  • 加载条码图像文件;
  • 将图像读取为位图或使用文件流;
  • 从图像中识别不同类型的条形码;
  • 读取条形码坐标;
  • 从单个图像中检测和读取多个条形码;
  • 从图像的特定区域检测和读取条形码。

除了在 C# 中从图像中读取条码外,您还可以使用 文档 了解有关 Aspose.BarCode for .NET API 的更多信息。如有任何疑问,请随时通过我们的免费支持论坛与我们联系。

也可以看看