SpringBoot使用Zxing生成二维码

这篇具有很好参考价值的文章主要介绍了SpringBoot使用Zxing生成二维码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Zxing

ZXing,一个支持在图像中解码和生成条形码(如二维码、PDF 417、EAN、UPC、Aztec、Data Matrix、Codabar)的库。ZXing(“zebra crossing”)是一个开源的、多格式的、用Java实现的一维/二维条码图像处理库,具有到其他语言的端口。

具体实现

对于在Spring项目中使用Zxing生成二维码,其实比较简单,只需要引入依赖,然后调用方法,并传入需要的参数即可。
最核心的代码就是
QRCodeWriter qrCodeWriter=new QRCodeWriter(); bitMatrix=qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
text :二维码中携带的内容
BarcodeFormat.QR_CODE :是一个枚举值,表示二维码(Quick Response Code)格式
width: 宽
height: 高
hints: 是一个map,包含一些其他的设置内容

1. 在pom文件中导入依赖

		<!-- ZXing二维码 -->
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>core</artifactId>
			<version>3.4.1</version> 
		</dependency>
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>javase</artifactId>
			<version>3.4.1</version>
		</dependency>

2. 二维码生成工具类

生成的二维码可以输出到本地文件中,也可以直接以IO流的形式返回给前端,前端再进行二维码的显示。

package com.lixy.sharingcurriculum.util;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;

public class QRCodeGenerator {

    /**
     * 生成二维码输出文件
     * @param text
     * @throws WriterException
     * @throws IOException
     */
    public static void generateQRCodeImage(String text) throws WriterException, IOException {

        int width = 350;
        int height = 350;
        String filePath = "C:/Users/li/Pictures/qrtest.png";

        // 定义二维码的参数
        HashMap<EncodeHintType, ErrorCorrectionLevel> hintMap = new HashMap<>();
        hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }

    /**
     * 生成二维码并以IO流返回
     * @param text
     * @return
     * @throws WriterException
     */
    public static BitMatrix createQRCode(String text) throws IOException {

        int width=200;
        int height=200;

        HashMap<EncodeHintType,Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET,"UTF-8"); //指定字符编码为“utf-8”
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); //指定二维码的纠错等级为中级
        hints.put(EncodeHintType.MARGIN, 2); //设置图片的边距,单位像素,非负值

        BitMatrix bitMatrix=null;

        try{
            QRCodeWriter qrCodeWriter=new QRCodeWriter();
            bitMatrix=qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        }catch (WriterException e){
            e.printStackTrace();
        }

        return bitMatrix;
    }

    public static void main(String[] args) {
        try {
            generateQRCodeImage("code");
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 控制层和服务层

/**
     * 生成带有课程表信息的二维码
     */
    @PostMapping("/generateQRCode")
    public void generateQRCode(String scheduleid,HttpServletResponse response) throws IOException {
        //设置响应流信息
        response.setContentType("image/png");
        //没有缓存
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        //设置过期的时间戳,为0表示立即过期
        response.setDateHeader("Expire", 0);

        BitMatrix bitMatrix=scheduleService.generateQRCode(scheduleid);

        OutputStream stream=response.getOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix,"png",stream);

    }
/**
     * 生成带有课程表信息的二维码
     * @return
     */
    @Override
    public BitMatrix generateQRCode(String scheduleid) throws IOException {

        Schedule schedule=scheduleMapper.selectById(scheduleid);

        //将课表信息转换为json格式
        String scheduleJson= JSON.toJSONString(schedule);
        return QRCodeGenerator.createQRCode(scheduleJson);

    }

4. 前端

wx.request({
      url: 'http://localhost:8080/schedule/generateQRCode?scheduleid='+this.data.id,
      method:'POST',
      responseType: 'arraybuffer', // 指定返回类型为ArrayBuffer
      success:res=>{
        const base64=wx.arrayBufferToBase64(res.data);
        const imagesrc='data:image/png;base64,'+base64;
        console.log("二维码url:"+imagesrc)
        this.setData({
          qrCodeImg:imagesrc
        })
      }
    })

		<view>
			扫描二维码即可导入课表
		</view>
		<image src="{{qrCodeImg}}" mode="aspectFit"/>  

总结

另外还可以使用一些其他的方式生成二维码,比如基于开源的Hutool工具生成二维码,可以参考SpringBoot系列(22):Java生成二维码的几种实现方式(基于Spring Boot)
也可以直接使用js生成,有QRCode.js库可以直接引用。

参考

使用Zxing生成二维码
Java生成二维码并以IO流的形式返回给前端展示(不需写入服务器),以及下载二维码图片文章来源地址https://www.toymoban.com/news/detail-850917.html

到了这里,关于SpringBoot使用Zxing生成二维码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二维码生成解析用ZXing.NET就够了,不要再引一堆生成和解析库了

    ZXing.NET 是一个开源的、功能强大的二维码处理库,它能够对二维码进行解码(读取信息)和编码(生成二维码)。ZXing 是 \\\"Zebra Crossing\\\" 的缩写,是一个跨平台的、用于解码和生成条形码和二维码的库。以下是一些 ZXing.Net 的主要功能通过实例讲解。 这些示例演示了 ZXing.Net 的

    2024年02月04日
    浏览(42)
  • 【支付系统】java springboot 生成二维码,二维码中文乱码

            支付系统必不可少的就是生成二维码,有时我们会需要将支付链接转换为二维码.用户通过移动设备扫描二维码调起支付. 该篇文章主要使用的是hutool自带的二维码生成功能.  1. 引入依赖(hutool 可以按需引入这里就直接使用all了) 2. hutool的官方已经有很详细的生成方式

    2024年02月11日
    浏览(43)
  • Android之 Zxing二维码详解

    一 简介 1.1 ZXing 目前Android扫描二维码,条形码主要用google官方的工具Zxing,支持扫码,相册解码,生成带logo的二维码等功能  Zxing github 示例地址:https://github.com/zxing/zxing 1.2 ZBar 由于zxing是基于java编写的,扫码速度和解析上可能没那么快,但大部分场合足够用。也有基于c/

    2024年02月08日
    浏览(42)
  • zxing二维码位矩阵转换成Bitmap位图

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。 该项目可实现的条形码编码和解码。我们支持以下格式: UPC-A,UPC-E EAN-8,EAN-13 39码 93码 代码128 创新及科

    2023年04月11日
    浏览(49)
  • Java便捷生成二维码并使用Excel

    第一步生成图片字节数组输出流 第二步字节数组输出流存入excel 使用的是easyexcel和hutool工具便捷快速开发 导出类信息 @ContentRowHeight(100) @ColumnWidth(100/6) 这两个注解是条件excel行列大小,可以自行调整 EasyExcel 会根据这个实体类来生成表格,可以去官网查看注解注释掉其中的某

    2024年02月09日
    浏览(40)
  • C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

      概述: 本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。 要使用OpenCvSharp来分别

    2024年03月09日
    浏览(80)
  • java实现二维码生成功能

    由于现在对二维码的使用比较多,正好我在项目里面也使用到了,所以写篇博客记录一下。 这里我是将我博客主页的url生成二维码,微信扫一扫可以看到我的博客主页(欢迎骚扰) 4.1、设置参数 上面这个只是简单的生成二维码,接下来说说自定义参数的方式生成,如长、宽

    2024年02月11日
    浏览(48)
  • java生成、识别条形码和二维码

    使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 MatrixToImageWriter 写入图片 可以生成、识别条形码和二维码 内置三种尺寸: enum Size {SMALL, MIDDLE, BIG} 依赖 将宽度不等的多个黑条和白条,按照一定

    2024年02月08日
    浏览(52)
  • Java生成二维码(前后端分离项目实战)

    📍 本文代码已放置 github:Mr-Write/SpringbootDemo: 各种demo案例 (github.com) ZXing(Zebra Crossing)是一个开源的条码扫描和生成库,用于读取和生成各种类型的条码和二维码。它由 Google 开发并发布,目前由一群开源社区维护。 ZXing 支持多种常见的条码格式,包括一维条码(如EAN-13、

    2024年02月10日
    浏览(64)
  • Java生成二维码的两种方法

    本文介绍Java生成二维码的两种方法,这两种方法都依赖于google提供的二维码依赖包。 一种是自己写工具类,代码可以网上抄。 另一种是使用hutool第三方工具类的依赖包,不用自己抄代码。 自定义工具包就是借助google生成二维码的依赖包,然后自己写工具类。 工具类 测试代

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包