2025/06/04日日志 使用 ZXing 生成和解析二维码

使用 ZXing 生成和解析二维码

在当今数字化时代,二维码的应用越来越广泛,从支付到信息传递,二维码都扮演着重要角色。本文将介绍如何使用 ZXing(Zebra Crossing)库在 Java 项目中生成和解析二维码。ZXing 是一个开源的 Java 库,用于生成和解析各种条码和二维码,支持多种格式,如 QR Code、Data Matrix 和 PDF417 等。

依赖配置

为了在项目中使用 ZXing,我们需要在 Maven 项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

这些依赖分别提供了 ZXing 的核心功能和 Java SE 特定的扩展功能。

生成二维码

生成二维码的代码如下:

package com.demo.demo.QRcode;

import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

@Controller
public class QRCodeController {

    @RequestMapping("QRCode")
    @ResponseBody
    public String QRCode(HttpServletRequest req) {
        final int width = 300;
        final int height = 300;
        final String format = "png";
        final String content = "我爱你,中国!!!";

        // 定义二维码的参数
        HashMap hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定编码格式
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定纠错等级
        hints.put(EncodeHintType.MARGIN, 2); // 设置白边

        // 生成二维码
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            Path file = new File("F:\\ideaWorkSpace\\demo\\src\\main\\resources\\static\\img.png").toPath();
            MatrixToImageWriter.writeToPath(bitMatrix, format, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }
}

代码解析

  1. 二维码内容content 变量存储了要编码到二维码中的字符串。
  2. 二维码参数
    • EncodeHintType.CHARACTER_SET:指定编码格式为 UTF-8。
    • EncodeHintType.ERROR_CORRECTION:设置纠错等级为 ErrorCorrectionLevel.M,这可以提高二维码的容错能力。
    • EncodeHintType.MARGIN:设置二维码周围的白边宽度。
  3. 生成二维码:使用 MultiFormatWriterencode 方法生成二维码矩阵,并通过 MatrixToImageWriter 将其写入到指定的文件路径。

解析二维码

解析二维码的代码如下:

("getQRCode")
@ResponseBody
public String getQRCode() throws Exception {
    MultiFormatReader formatReader = new MultiFormatReader();
    File file = new File("F:\\ideaWorkSpace\\demo\\src\\main\\resources\\static\\img.png");
    BufferedImage image = ImageIO.read(file);
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));

    // 定义二维码的参数
    HashMap hints = new HashMap<>();
    hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定编码格式

    Result result = formatReader.decode(binaryBitmap, hints);
    System.out.println("二维码解析结果:" + result.toString());
    System.out.println("二维码的格式:" + result.getBarcodeFormat());
    System.out.println("二维码的文本内容:" + result.getText());
    return result.getText();
}

代码解析

  1. 读取二维码图片:通过 ImageIO.read 方法读取二维码图片文件。
  2. 创建二值化图像:使用 BufferedImageLuminanceSourceHybridBinarizer 将图片转换为二值化图像。
  3. 解析二维码:使用 MultiFormatReaderdecode 方法解析二维码,并获取其中的内容。

总结

通过 ZXing 库,我们可以轻松地在 Java 项目中生成和解析二维码。生成二维码时,可以通过设置参数来调整二维码的格式、纠错能力和白边宽度。解析二维码时,只需要读取图片并调用解析方法即可。ZXing 库的强大功能和易用性使其成为处理二维码的理想选择。

posted @ 2025-06-11 19:17  Moonbeamsc  阅读(471)  评论(0)    收藏  举报
返回顶端