📅  最后修改于: 2023-12-03 15:36:17.027000             🧑  作者: Mango
如果你需要从图像中读取二维码信息,Java 提供了许多库和工具来实现这个功能。在本文中,我们将介绍如何使用 ZXing 库来从图像中读取二维码。
ZXing("Zebra Crossing")是一个用 Java 开发的开源库,能够识别各种标准格式的二维码(QR Code、Data Matrix 等)。它还能生成二维码,并支持多种编程语言。
你需要下载 ZXing 库,将其添加到你的项目中。你可以从 官方仓库 或 Maven 中央仓库 下载 ZXing 核心库(Core)。
如果你使用 Maven,可以在 pom.xml
中添加以下依赖项:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
如果你使用 Gradle,可以在 build.gradle
中添加以下依赖项:
dependencies {
implementation 'com.google.zxing:core:3.3.3'
}
在本文中,我们将介绍从文件和 BufferedImage 中读取二维码的方式。在每个示例中,我们将使用 MultiFormatReader
类来解码图像中的二维码。
以下示例展示了如何使用 MultiFormatReader
类从文件中读取二维码:
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class QRCodeReaderExample {
public static void main(String[] args) {
try {
String filePath = "/path/to/your/image.png";
File qrCodeFile = new File(filePath);
BufferedImage bufferedImage = ImageIO.read(qrCodeFile);
decodeQRCode(bufferedImage);
} catch (IOException e) {
System.out.println("Could not read QR Code file: " + e.getMessage());
}
}
private static void decodeQRCode(BufferedImage bufferedImage) {
MultiFormatReader barcodeReader = new MultiFormatReader();
try {
com.google.zxing.Result result = barcodeReader.decode(new com.google.zxing.BinaryBitmap(new com.google.zxing.RGBLuminanceSource(bufferedImage, bufferedImage.getWidth(), bufferedImage.getHeight(), null)));
System.out.println("二维码内容: " + result.getText());
} catch (NotFoundException e) {
System.out.println("Could not decode QR Code: " + e.getMessage());
}
}
}
以下示例展示了如何使用 MultiFormatReader
类从 BufferedImage
中读取二维码:
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class QRCodeReaderExample {
public static void main(String[] args) {
try {
BufferedImage bufferedImage = ImageIO.read(new File("/path/to/your/image.png"));
decodeQRCode(bufferedImage);
} catch (IOException e) {
System.out.println("Could not read QR Code file: " + e.getMessage());
}
}
private static void decodeQRCode(BufferedImage bufferedImage) {
MultiFormatReader barcodeReader = new MultiFormatReader();
try {
com.google.zxing.Result result = barcodeReader.decode(new com.google.zxing.BinaryBitmap(new com.google.zxing.RGBLuminanceSource(bufferedImage, bufferedImage.getWidth(), bufferedImage.getHeight(), null)));
System.out.println("二维码内容: " + result.getText());
} catch (NotFoundException e) {
System.out.println("Could not decode QR Code: " + e.getMessage());
}
}
}
以上就是使用 ZXing 库从图像中读取二维码的方式。请注意,为了避免抛出 NotFoundException
异常,你的图像必须具有足够的清晰度和对比度。