Mã vạch đóng một vai trò quan trọng trong việc theo dõi chính xác hàng tồn kho và phân phối sản phẩm từ nơi sản xuất đến điểm bán. Trong một số trường hợp nhất định, chúng tôi có thể cần đọc mã vạch từ hình ảnh theo chương trình. Chúng ta có thể dễ dàng phát hiện, nhận ra và đọc các loại mã vạch và mã QR trong các ứng dụng Java. Nó giúp phát triển các ứng dụng đầu đọc hoặc máy quét mã vạch. Trong bài viết này, chúng ta sẽ học cách đọc mã vạch từ hình ảnh bằng Java.
Các chủ đề sau sẽ được đề cập trong bài viết này:
- Mã vạch là gì
- API Java để đọc mã vạch từ hình ảnh
- Đọc mã vạch từ một hình ảnh
- Nhận dạng mã vạch của loại cụ thể
- Đọc nhiều mã vạch từ một hình ảnh
- Nhận tọa độ X và Y của mã vạch
- Đọc mã vạch từ vùng cụ thể của hình ảnh
Mã vạch là gì
Mã vạch là mã có thể đọc được bằng máy đại diện cho dữ liệu được mã hóa ở dạng số và dạng đường thẳng song song. Hình ảnh mã vạch cho thấy một loạt các thanh màu đen và trắng song song khác nhau về độ rộng, khoảng cách và kích thước. Đầu đọc hoặc máy quét mã vạch quét hình ảnh mã vạch và giải mã thông tin.
API Java để đọc mã vạch từ hình ảnh
Để đọc mã vạch từ hình ảnh trong các ứng dụng Java, chúng tôi sẽ sử dụng Aspose.BarCode cho Java. Đây là một API giàu tính năng cho phép bạn tạo, quét và đọc nhiều loại ký hiệu mã vạch. Lớp BarCodeReader của API cho phép đọc mã vạch. Phương thức readBarCodes() của lớp này trả về một mảng mã vạch được công nhận. API cho phép đọc mã vạch của Loại giải mã được chỉ định. Lớp BarCodeResult của API lưu trữ dữ liệu mã vạch được công nhận như loại mã vạch, văn bản mã, vùng và các thông số khác.
Vui lòng tải xuống JAR của API hoặc thêm cấu hình pom.xml sau vào ứng dụng Java dựa trên Maven.
<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>
Đọc mã vạch từ một hình ảnh trong Java
Chúng tôi có thể đọc mã vạch từ một hình ảnh bằng cách làm theo các bước dưới đây:
- Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
- Nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức readBarCodes().
- Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.
Mẫu mã sau đây cho thấy cách đọc mã vạch từ hình ảnh bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch từ một hình ảnh.
// Đường dẫn đến thư mục hình ảnh
String dataDir = "C:\\Files\\BarCode\\";
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(dataDir + "CodeText.jpg");
// Đọc mã vạch và hiển thị kết quả
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
Nhận dạng mã vạch của loại cụ thể trong Java
Chúng tôi có thể đọc mã vạch của một loại cụ thể từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:
- Đầu tiên, đọc dữ liệu đệm của tệp hình ảnh bằng phương thức ImageIO.read().
- Tiếp theo, tạo một thể hiện của lớp BarCodeReader với hình ảnh được đệm và Loại giải mã.
- Sau đó, đặt loại giải mã mã vạch để đọc mã vạch của một loại cụ thể, chẳng hạn như CODE39STANDARD.
- Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức readBarCodes().
- Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.
Mẫu mã sau đây cho thấy cách đọc mã vạch của một loại cụ thể từ một hình ảnh bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch của một loại giải mã cụ thể từ một hình ảnh.
// Đường dẫn đến thư mục hình ảnh
String dataDir = "C:\\Files\\BarCode\\";
// Nhận hình ảnh được nâng cấp
BufferedImage img = ImageIO.read(new File(dataDir + "CODE_39_STANDARD.jpg"));
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(img, DecodeType.CODE_39_STANDARD);
// Đọc mã vạch của loại Code39Extended
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
Đọc nhiều mã vạch từ hình ảnh trong Java
Chúng tôi cũng có thể đọc tất cả các mã vạch có sẵn từ một hình ảnh bằng cách làm theo các bước dưới đây:
- Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
- Tiếp theo, đặt loại giải mã mã vạch là ALLSUPPORTEDTYPES.
- Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức readBarCodes().
- Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.
Mẫu mã sau đây cho thấy cách đọc nhiều mã vạch từ một hình ảnh bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch nhiều mã vạch từ một hình ảnh.
// Đường dẫn đến thư mục hình ảnh
String dataDir = "C:\\Files\\BarCode\\";
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(dataDir + "MultipleBarcodes.png", DecodeType.ALL_SUPPORTED_TYPES);
// Đọc tất cả các loại mã vạch có sẵn trên hình ảnh đầu vào
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println("-------------------------");
}
Nhận tọa độ X và Y của mã vạch bằng Java
Chúng tôi có thể đọc tọa độ X và Y của mã vạch được phát hiện từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:
- Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
- Tiếp theo, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức readBarCodes().
- Sau đó, lặp lại các kết quả và kiểm tra xem getRegion() có phải là null hay không.
- Sau đó, lấy mảng Điểm giới hạn vùng mã vạch bằng getPoints().
- Cuối cùng, hiển thị điểm X và Y của mã vạch.
Mẫu mã sau đây cho thấy cách lấy các điểm tọa độ X và Y của mã vạch từ một hình ảnh bằng Java.
// Ví dụ mã này trình bày cách đọc điểm vùng X & Y của mã vạch từ một hình ảnh.
// Đường dẫn đến thư mục hình ảnh
String dataDir = "C:\\Files\\BarCode\\";
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(dataDir + "Code39Std.png", DecodeType.ALL_SUPPORTED_TYPES);
// Đọc mã vạch
for (BarCodeResult result : reader.readBarCodes()) {
if (result.getRegion() != null) {
// Hiển thị tọa độ x và y của tất cả các mã vạch được phát hiện
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);
}
}
Đọc mã vạch từ vùng ảnh cụ thể trong Java
Chúng tôi có thể đọc mã vạch từ một khu vực cụ thể hoặc một khu vực của hình ảnh bằng cách thực hiện theo các bước dưới đây:
- Đầu tiên, đọc dữ liệu đệm của tệp hình ảnh bằng phương thức ImageIO.read().
- Tiếp theo, tạo một thể hiện của lớp BarCodeReader. Nó lấy một hình ảnh được đệm, một vùng hình chữ nhật và một Kiểu giải mã làm đối số.
- Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức readBarCodes().
- Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.
Mẫu mã sau đây cho thấy cách đọc mã vạch từ một vùng cụ thể của hình ảnh bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch từ vùng cụ thể của hình ảnh.
// Đường dẫn đến thư mục hình ảnh
String dataDir = "C:\\Files\\BarCode\\";
// Nhận BufferedImage
java.awt.image.BufferedImage img = javax.imageio.ImageIO.read(new java.io.File(dataDir + "specificRegion.png"));
// Tạo một phiên bản của lớp BarCodeReader
// và chỉ định một khu vực để tìm mã vạch
BarCodeReader reader = new BarCodeReader(img, new Rectangle(0, 0, 700, 100), DecodeType.ALL_SUPPORTED_TYPES);
// Đọc tất cả mã vạch trong khu vực được cung cấp
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
}
Nhận giấy phép miễn phí
Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử thư viện mà không có giới hạn đánh giá.
Sự kết luận
Trong bài viết này, chúng tôi đã học cách:
- Tải hình ảnh mã vạch theo chương trình;
- nhận dạng mã vạch của các loại khác nhau từ một hình ảnh;
- đọc tọa độ mã vạch trong Java;
- phát hiện và đọc nhiều mã vạch từ một hình ảnh duy nhất;
- phát hiện và đọc mã vạch từ một khu vực cụ thể của hình ảnh.
Ngoài ra, bạn có thể tìm hiểu thêm về Aspose.BarCode cho Java API bằng cách sử dụng tài liệu. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn.