🔥 Spring Boot 3 整合 zxing:轻松生成二维码的指南

引言

在数字化时代,二维码已成为连接线上线下世界的重要桥梁。无论是支付、信息分享还是产品溯源,二维码都扮演着关键角色。本文将带你探索如何在 Spring Boot 项目中整合 zxing 库,快速生成功能强大的二维码。通过本教程,你将掌握从零开始实现二维码生成功能的完整流程,并了解如何自定义二维码的各种参数。

二维码包含的信息

在开始技术实现前,让我们先了解二维码可以做什么:

  • 文本信息:简单文字、联系方式、诗句等
  • URL链接:快速跳转到指定网页
  • WiFi配置:自动连接指定WiFi网络
  • 电子名片:存储联系人信息
  • 支付信息:微信、支付宝等支付二维码

从这些丰富的应用场景可以看出,二维码的本质其实是信息的载体。接下来,让我们动手编码,看看如何用代码把信息装进二维码里。

编码实操

只需要简单两步,就可以实现生成二维码的需求。

1. 添加依赖

首先在 pom.xml 中添加 zxing 依赖(Ps:这里是我使用的版本,大家在看到这篇文章的时候,建议去 Maven 中央仓库查找最新的版本使用):

xml 复制代码
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.5.3</version>
</dependency>

2.编写生成逻辑

java 复制代码
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;


/**
 * 生成二维码图片并保存到指定路径
 * 
 * @param data     二维码内容(文本/URL/WiFi配置等)
 * @param width    二维码宽度(像素)
 * @param height   二维码高度(像素)
 * @param filePath 保存路径(需包含.png后缀)
 * @return 生成的二维码文件路径,失败时返回null
 */
public static String generateQRCode(String data, int width, int height, String filePath) {
    try {
        //1.设置二维码生成参数
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 支持中文等特殊字符
        hints.put(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H); // 30%容错率
        hints.put(EncodeHintType.MARGIN, 1); // 二维码边框空白宽度

        //2.生成二维码矩阵数据
        MultiFormatWriter writer = new MultiFormatWriter();
        BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, width, height, hints);

        //3.转换为图像对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
            }
        }

        //4.保存为PNG文件
        File qrCodeFile = new File(filePath);
        ImageIO.write(image, "png", qrCodeFile);
        System.out.println("二维码已生成并保存到: " + filePath);
        return filePath;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

这里主要对代码中**ErrorCorrectionLevel(错误纠正级别)BarcodeFormat(条码格式)**这两个大家不是很熟悉的参数做下说明:

错误纠正级别包含四个等级:

等级 容错率 适用场景 存储容量减少量
L (Low) 约7% 高清晰度环境(如打印文档) 最少
M (Medium) 约15% 一般商业应用(默认级别) 中等
Q (Quartile) 约25% 工业环境(可能有污损) 较多
H (High) 约30% 极端环境(户外广告、破损包装) 最多

容错率表示二维码残缺的部分小于等于这个比率依然可以被识别。

条码格式常见的应用如下:

特性 QR_CODE CODE_128 PDF_417
最大容量 2953字节 80字符 1850字符
是否需要扫描方向 任意角度 水平方向 水平方向
典型应用 移动支付 商品物流 证件存储

这个依赖库中封装的条码格式非常全面,几乎囊括了目前的所有场景,具体大家可以在代码中查看BarcodeFormat中声明的常量。

3.测试效果

编写一个方法测试生成二维码:

java 复制代码
public static void main(String[] args) {
    String data = "Hello~ CC"; // 二维码中的数据
    int width = 300; // 二维码的宽度
    int height = 300; // 二维码的高度
    String uuid = UUID.randomUUID().toString();
    String filePath = "D:\\pic\\" + uuid + ".png"; // 生成的二维码文件的路径

    QrCodeUtils.generateQRCode(data, width, height, filePath);
}

运行后在指定目录生成了一个二维码图片:

用手机扫描一下得到文本信息,和测试代码中设置的一致:

小结

zxing 库功能强大且易于集成,可以作为 spring boot 应用处理二维码的首选方案。大家在实际项目中使用的时候,可以将本文的代码示例封装成工具类,也可以作为参考自己实现。二维码生成也只是 zxing 功能的冰山一角,它还能解析二维码、生成各种条形码等等,各位读者感兴趣的话可以继续深入探索。

相关推荐
一只小松许️11 分钟前
Rust泛型与特性
java·开发语言·rust
码代码的小农5 小时前
Resilience4j与Spring Cloud Gateway整合指南:构建弹性的API网关
spring boot
angushine5 小时前
Gateway获取下游最终响应码
java·开发语言·gateway
爱的叹息5 小时前
关于 JDK 中的 jce.jar 的详解,以及与之功能类似的主流加解密工具的详细对比分析
java·python·jar
一一Null5 小时前
Token安全存储的几种方式
android·java·安全·android studio
来自星星的坤5 小时前
SpringBoot 与 Vue3 实现前后端互联全解析
后端·ajax·前端框架·vue·springboot
AUGENSTERN_dc6 小时前
RaabitMQ 快速入门
java·后端·rabbitmq
晓纪同学6 小时前
C++ Primer (第五版)-第十三章 拷贝控制
java·开发语言·c++
小样vvv6 小时前
【源码】SpringMvc源码分析
java