条形码在准确跟踪库存和产品从制造到销售点的交付方面发挥着至关重要的作用。在某些情况下,我们可能需要以编程方式从图像中读取条形码。我们可以在 Java 应用程序中轻松检测、识别和读取各种类型的条码和二维码。它有助于开发条形码阅读器或扫描仪应用程序。在本文中,我们将学习如何使用 Java 从图像中读取条形码。
本文将涵盖以下主题:
什么是条码
条形码是一种机器可读的代码,它以数字和平行线图案的形式表示编码数据。条形码图像显示了一系列不同宽度、间距和大小的平行黑白条。条形码阅读器或扫描仪扫描条形码图像并对信息进行解码。
Java API 从图像中读取条形码
为了在 Java 应用程序中从图像中读取条形码,我们将使用 Aspose.BarCode for Java。它是一个功能丰富的 API,可让您生成、扫描和读取范围广泛的 条形码符号。 API 的 BarCodeReader 类允许读取条形码。此类的 readBarCodes() 方法返回一个可识别的 barcodes 数组。 API 允许读取指定 DecodeType 的条形码。 API的BarCodeResult类存储识别的条码数据,如条码类型、代码文本、区域等参数。
请下载 API 的 JAR 或在基于 Maven 的 Java 应用程序中添加以下 pom.xml 配置。
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-barcode</artifactId>
<version>22.5</version>
</dependency>
用Java从图像中读取条形码
我们可以按照以下步骤从图像中读取条形码:
- 首先,使用 BarCodeReader 类加载图像。
- 使用 readBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
- 最后,遍历结果并显示条形码的类型和文本。
以下代码示例展示了如何使用 Java 从图像中读取条形码。
// 此代码示例演示如何从图像中读取条形码。
// 图像目录的路径
String dataDir = "C:\\Files\\BarCode\\";
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader(dataDir + "CodeText.jpg");
// 读取条形码并显示结果
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
在 Java 中识别特定类型的条码
我们可以按照以下步骤从图像中读取特定类型的条形码:
- 首先,使用 ImageIO.read() 方法读取图像文件的缓冲区数据。
- 接下来,使用缓冲图像和解码类型创建 BarCodeReader 类的实例。
- 然后,设置条码解码类型以读取特定类型的条码,例如 CODE39STANDARD。
- 之后,使用 readBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
- 最后,遍历结果并显示条形码的类型和文本。
以下代码示例展示了如何使用 Java 从图像中读取特定类型的条形码。
// 此代码示例演示如何从图像中读取特定解码类型的条形码。
// 图像目录的路径
String dataDir = "C:\\Files\\BarCode\\";
// 获取缓冲图像
BufferedImage img = ImageIO.read(new File(dataDir + "CODE_39_STANDARD.jpg"));
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader(img, DecodeType.CODE_39_STANDARD);
// 读取 Code39Extended 类型的条码
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
在 Java 中从图像中读取多个条码
我们还可以按照以下步骤从图像中读取所有可用的条形码:
- 首先,使用 BarCodeReader 类加载图像。
- 接下来,将条码解码类型设置为 ALLSUPPORTEDTYPES。
- 之后,使用 readBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
- 最后,遍历结果并显示条形码的类型和文本。
以下代码示例展示了如何使用 Java 从图像中读取多个条形码。
// 此代码示例演示如何从图像中读取多个条形码。
// 图像目录的路径
String dataDir = "C:\\Files\\BarCode\\";
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader(dataDir + "MultipleBarcodes.png", DecodeType.ALL_SUPPORTED_TYPES);
// 读取输入图像上可用的所有类型的条形码
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println("-------------------------");
}
使用 Java 获取条码的 X 和 Y 坐标
我们可以按照以下步骤从图像中读取检测到的条形码的 X 和 Y 坐标:
- 首先,使用 BarCodeReader 类加载图像。
- 接下来,使用 readBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
- 然后,遍历结果并检查 getRegion() 是否不为空。
- 之后,使用 getPoints() 获取边界条码区域的 Points 数组。
- 最后,显示条码的 X 和 Y 点。
以下代码示例展示了如何使用 Java 从图像中获取条码的 X 和 Y 坐标点。
// 此代码示例演示如何从图像中读取条形码的 X 和 Y 区域点。
// 图像目录的路径
String dataDir = "C:\\Files\\BarCode\\";
// 初始化条码阅读器
BarCodeReader reader = new BarCodeReader(dataDir + "Code39Std.png", DecodeType.ALL_SUPPORTED_TYPES);
// 读取条码
for (BarCodeResult result : reader.readBarCodes()) {
if (result.getRegion() != null) {
// 显示检测到的所有条码的 x 和 y 坐标
Point[] point = result.getRegion().getPoints();
System.out.println("Top left coordinates: X = " + point[0].x + ", Y = " + point[0].y);
System.out.println("Bottom left coordinates: X = " + point[1].x + ", Y = " + point[1].y);
System.out.println("Bottom right coordinates: X = " + point[2].x + ", Y = " + point[2].y);
System.out.println("Top right coordinates: X = " + point[3].x + ", Y = " + point[3].y);
}
}
在 Java 中从图像的特定区域读取条形码
我们可以按照以下步骤从图像的特定区域或区域读取条形码:
- 首先,使用 ImageIO.read() 方法读取图像文件的缓冲区数据。
- 接下来,创建 BarCodeReader 类的实例。它需要一个缓冲图像、一个矩形区域和一个解码类型作为参数。
- 之后,使用 readBarCodes() 方法在 BarCodeResult 类对象中获取识别结果。
- 最后,遍历结果并显示条形码的类型和文本。
以下代码示例展示了如何使用 Java 从图像的特定区域读取条形码。
// 此代码示例演示如何从图像的特定区域读取条形码。
// 图像目录的路径
String dataDir = "C:\\Files\\BarCode\\";
// 获取缓冲图像
java.awt.image.BufferedImage img = javax.imageio.ImageIO.read(new java.io.File(dataDir + "specificRegion.png"));
// 创建 BarCodeReader 类的实例
// 并指定一个区域来查找条形码
BarCodeReader reader = new BarCodeReader(img, new Rectangle(0, 0, 700, 100), DecodeType.ALL_SUPPORTED_TYPES);
// 读取提供区域中的所有条形码
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
获得免费许可证
您可以获得免费的临时许可证 试用该库而不受评估限制。
结论
在本文中,我们学习了如何:
- 以编程方式加载条形码图像;
- 从图像中识别不同类型的条形码;
- 在 Java 中读取条形码坐标;
- 从单个图像中检测和读取多个条形码;
- 从图像的特定区域检测和读取条形码。
此外,您可以使用 documentation 了解更多关于 Aspose.BarCode for Java API 的信息。如有任何歧义,请随时在 论坛 上与我们联系。