📜  如何使用 ZXing 库用Java生成和读取二维码(1)

📅  最后修改于: 2023-12-03 15:23:58.166000             🧑  作者: Mango

如何使用 ZXing 库用 Java 生成和读取二维码

什么是 ZXing 库

ZXing(pronounced "zebra crossing")是一个开源的条码图像处理库,支持多种条码格式的编码和解码,包括二维码(QR Code)、条形码等。ZXing 在 GitHub 上获得了广泛的应用,并被 Google 开发的 Android 平台默认集成在系统中。

如何使用 ZXing 库
生成二维码

使用 ZXing 库生成二维码非常方便,只需几行代码即可轻松实现。以下是使用 Java 代码生成二维码的示例:

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class QRCodeGenerator {
    public static void main(String[] args) {
        int width = 300;
        int height = 300;
        String format = "png";
        String filePath = "qrcode.png";
        String content = "https://www.example.com";

        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        hints.put(EncodeHintType.MARGIN, 0);

        try {
            QRCodeWriter writer = new QRCodeWriter();
            BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            Path path = FileSystems.getDefault().getPath(filePath);
            MatrixToImageWriter.writeToPath(matrix, format, path);
            System.out.println("QR code generated successfully.");
        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
    }
}

在以上示例中,我们首先使用 QRCodeWriter 创建了一个 BitMatrix 对象,然后使用 MatrixToImageWriter 将其转换为图片并保存在本地。我们可以指定生成图片的大小、格式、以及二维码中包含的内容等。

读取二维码

与生成二维码相比,使用 ZXing 库读取二维码稍微有些复杂,但仍然十分简单。以下是一个使用 Java 代码读取二维码的示例:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

public class QRCodeReader {
    public static void main(String[] args) {
        String filePath = "qrcode.png";

        try {
            BufferedImage image = ImageIO.read(new File(filePath));
            MultiFormatReader reader = new MultiFormatReader();

            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
                    new BufferedImageLuminanceSource(image)));
            Result result = reader.decode(bitmap);

            System.out.println(result.getText());
        } catch (IOException | com.google.zxing.NotFoundException e) {
            e.printStackTrace();
        }
    }
}

在以上示例中,我们首先使用 ImageIO.read 从本地读取了一张二维码图片。然后使用 MultiFormatReader 创建了一个解码器,接着使用 BinaryBitmap 封装了读取到的图片并传给了解码器,最终我们可以从 Result 对象中获取到二维码中包含的内容。

总结

ZXing 库为我们提供了一个轻量级且易于使用的解决方案来生成和读取二维码和条形码。文章中我们从代码示例的角度为大家详细讲解了如何使用 ZXing 库生成和读取二维码,希望可以帮助到大家。