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

简介: 本文介绍了如何在Spring Boot项目中使用zxing库生成二维码。首先,二维码作为信息载体广泛应用在支付、信息分享等领域。接着,通过添加zxing依赖和编写生成逻辑两步实现功能。代码中设置了二维码参数如错误纠正级别(最高30%容错率)和尺寸,并将生成的二维码保存为PNG文件。测试结果显示生成的二维码可正确解析为预设文本。最后,zxing库功能远不止于此,还可用于解析二维码及生成多种条形码,值得进一步探索。

引言

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

二维码包含的信息

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

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

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

编码实操

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

1. 添加依赖

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

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

2.编写生成逻辑

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.测试效果

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

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);
}

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

1.png

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

2.png

小结

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

目录
相关文章
|
11月前
|
存储 前端开发 Java
揭秘!如何用Spring Boot轻松打造动态二维码生成器?一键解锁无限可能,你的创意将无处不在!
【8月更文挑战第29天】在数字化时代,二维码成为信息快速传递的关键工具,广泛应用于支付、身份验证和产品追溯等场景。本文将指导你如何利用Spring Boot框架和Google的ZXing库,搭建一个动态生成二维码的Web服务。首先,通过Spring Initializr创建项目并配置相关依赖;接着,编写二维码生成逻辑和服务类;最后,在Controller中整合这些功能,提供RESTful接口供外部调用。通过访问`/generate-qrcode?text=你的内容`即可测试API并获取二维码图片。这为开发者提供了强大的工具,未来还可进一步优化存储和提升性能。
385 3
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
6月前
|
Java 开发者
SpringBoot整合Flowable【01】- 初识工作流引擎
本文介绍了工作流的基本概念,重点讲解了BPM(业务流程管理)和BPMN 2.0(业务流程建模符号)的关系,以及工作流引擎的发展。BPM是一种管理思想,BPMN是实现该思想的工具。文中还介绍了Flowable、Activiti等主流工作流引擎,并详细说明了流程设计的五种方式,包括FlowableUI、BPMN.js自定义、第三方设计器和代码实现等。最后通过一个请假流程图解释了流程图的组成元素,如事件、连线、任务和网关,帮助读者更好地理解工作流的设计与实现。
414 3
SpringBoot整合Flowable【01】- 初识工作流引擎
|
4月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
3800 7
|
6月前
|
Java API 调度
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
XXL-JOB 是一个分布式任务调度平台,设计目标为开发迅速、学习简单、轻量级、易扩展。它解决了分布式环境下定时任务重复执行的问题,无需额外加锁,降低了维护成本。XXL-JOB 由调度中心和执行器两部分组成,前者管理任务,后者执行具体逻辑,使代码结构更清晰。适用于多机部署场景,支持统一管理任务的启停和频率调整。
220 8
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
|
6月前
|
缓存 NoSQL Java
自研一套高性能API网关,你都需要做什么?
本文介绍了自研API网关的基本组成和架构,涵盖网关的作用、请求生命周期、功能点详解(如插件和规则)、技术选型(Java、Netty、Nacos)及设计要点。通过异步化设计、缓存、串行化优化、提高吞吐量和合理配置工作线程,确保高性能与稳定性。最后,提供了网关的架构图,帮助读者全面理解其构建过程。
291 0
|
8月前
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
399 7
|
11月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
255 1