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";
}
}
代码解析
- 二维码内容:
content变量存储了要编码到二维码中的字符串。 - 二维码参数:
EncodeHintType.CHARACTER_SET:指定编码格式为 UTF-8。EncodeHintType.ERROR_CORRECTION:设置纠错等级为ErrorCorrectionLevel.M,这可以提高二维码的容错能力。EncodeHintType.MARGIN:设置二维码周围的白边宽度。
- 生成二维码:使用
MultiFormatWriter的encode方法生成二维码矩阵,并通过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();
}
代码解析
- 读取二维码图片:通过
ImageIO.read方法读取二维码图片文件。 - 创建二值化图像:使用
BufferedImageLuminanceSource和HybridBinarizer将图片转换为二值化图像。 - 解析二维码:使用
MultiFormatReader的decode方法解析二维码,并获取其中的内容。
总结
通过 ZXing 库,我们可以轻松地在 Java 项目中生成和解析二维码。生成二维码时,可以通过设置参数来调整二维码的格式、纠错能力和白边宽度。解析二维码时,只需要读取图片并调用解析方法即可。ZXing 库的强大功能和易用性使其成为处理二维码的理想选择。

浙公网安备 33010602011771号