SpringBoot整合ZXing实现二维码和条形码的创建

 更新时间:2023年12月12日 09:27:41   作者:-代号9527  
如今我们越来越多的东西需要用到二维码或者条形码,商品的条形码,付款的二维码等等,所以本文小编给大家介绍了SpringBoot整合ZXing实现二维码和条形码的创建,文章通过代码示例给大家介绍的非常详细,需要的朋友可以参考下

以下为整合zxing实现二维码和条形码的生成。

1、引入依赖

引入ZXing依赖的坐标:

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

2、Service层实现

Service接口略,实现类:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;

/**
 * @author LLG
 * @date 2023/12/8
 */
@Service
@Slf4j
public class CodeService {

    /**
     * 生成二维码
     * @param data   扫描二维码后得到的信息
     * @param width  二维码的宽
     * @param height 二维码的高
     * @return image
     */
    public BufferedImage generateCode(String data, int width, int height) {
        BufferedImage image = null;
        try {
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //字符编码
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            //错误纠正级别
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
            //二维码边距
            hints.put(EncodeHintType.MARGIN, 2);
            MultiFormatWriter writer = new MultiFormatWriter();
            //样式选择QR_CODE,其余枚举类中的可选样式可自己玩
            BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, width, height, hints);
            image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            //每个框框的颜色
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    image.setRGB(i, j, bitMatrix.get(i, j) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
                }
            }
            /*以下为选择保存二维码
            String filePath = "test.png";
            File codeFile = new File(filePath);
            ImageIO.write(image,"png",codeFile);
            log.info("QR码生成成功,保存路径{}",filePath);*/
        } catch (Exception e) {
            e.printStackTrace();
        }
        return image;

    }

    /**
     * 生成条形码
     * @param data   扫描二维码后得到的信息
     * @param width  条形码的宽
     * @param height 条形码的高
     * @return image
     */
    public BufferedImage generateBarCode(String data, int width, int height) {
        BufferedImage image = null;
        try {
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //字符编码
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            MultiFormatWriter writer = new MultiFormatWriter();
            //码的样式这次选CODE_128
            BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.CODE_128, width, height, hints);
            image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    image.setRGB(i, j, bitMatrix.get(i, j) ? 0 : 0xFFFFFF);   //黑白条形码
                }
            }
        } catch (WriterException e) {
            e.printStackTrace();
        }

        return image;
    }

 
}

3、Controller

写个简单API调用下:

@RestController
public class CodeController {

    @Resource
    private CodeService codeService;

    @GetMapping("/code/image")
    public void getCodeImage(HttpServletRequest request, HttpServletResponse response){
        //测试数据
        String data = "code9527-test!";
        BufferedImage image = codeService.generateCode(data, 100, 100);
        try {
            ImageIO.write(image,"png",response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @GetMapping("/code/barCode")
    public void getBarCode(HttpServletRequest request,HttpServletResponse response){
        //条形码中的内容
        String data = "TB20231208154900";
        BufferedImage barCode = codeService.generateBarCode(data, 400, 100);
        try {
            ImageIO.write(barCode,"png",response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4、效果

二维码:

条形码:

以上就是SpringBoot整合ZXing实现二维码和条形码的创建的详细内容,更多关于SpringBoot ZXing二维码和条形码的资料请关注脚本之家其它相关文章!

相关文章

  • Java反射框架Reflections示例详解

    Java反射框架Reflections示例详解

    这篇文章主要介绍了Java反射框架Reflections示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java对称加密算法DES实例详解

    Java对称加密算法DES实例详解

    这篇文章主要介绍了Java对称加密算法DES,结合实例形式详细分析了java DES算法的概念、原理、实现方法与应用场景,需要的朋友可以参考下
    2019-09-09
  • Spring Security JWT 鉴权链路完整解析

    Spring Security JWT 鉴权链路完整解析

    文章详细解析了SpringSecurity结合JWT实现鉴权的完整链路,从配置到代码,涵盖了从请求到业务层的每一个步骤,包括配置资源服务器模式、JWT编解码、自定义JWT服务、请求过滤和Controller层的注入机制
    2026-02-02
  • Spring异常实现统一处理的方法

    Spring异常实现统一处理的方法

    这篇文章主要介绍了Spring异常实现统一处理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java进阶之在Word文档中动态增删页面的完整指南

    Java进阶之在Word文档中动态增删页面的完整指南

    本文将介绍如何使用一款第三方 Java 库,以编程方式实现对 Word 文档页面及段落内容的精细化管理,文章将从环境配置开始,逐步演示如何新增页面,在指定位置插入页面以及删除特定页面,希望对大家有一定的帮助
    2026-05-05
  • 深入理解java中的synchronized关键字

    深入理解java中的synchronized关键字

    这篇文章主要介绍了java中的synchronized关键字,有需要的朋友可以参考一下
    2013-12-12
  • Java SpringBoot 集成 Redis详解

    Java SpringBoot 集成 Redis详解

    Redis 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API
    2021-10-10
  • maven的pom.xml中repositories和distributionManagement使用

    maven的pom.xml中repositories和distributionManagement使用

    这篇文章主要介绍了maven的pom.xml中repositories和distributionManagement使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java中双大括号初始化的理解与使用

    Java中双大括号初始化的理解与使用

    最近重读Java 编程思想,读到有关实例化代码块儿的内容,使我对于使用两个大括号进行初始化有了更深的理解,下面这篇文章主要给大家介绍了关于Java中双大括号初始化的理解与使用的相关资料,需要的朋友可以参考下
    2022-06-06
  • Springboot配置图片虚拟映射示例代码

    Springboot配置图片虚拟映射示例代码

    这篇文章主要给大家介绍了关于Springboot配置图片虚拟映射的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用springboot具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11

最新评论