用Spring Boot+ZXing生成二维码

Posted 埋年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Spring Boot+ZXing生成二维码相关的知识,希望对你有一定的参考价值。

1、ZXing的介绍
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。

2、了解二维码:
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

3、如何生成二维码
二维码的生成基础,都是zxing包,这是Google开源的一个包,我们需要使用原始的zxing方式去实现。
添加依赖

<!-- 二维码支持包 -->
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>core</artifactId>
  <version>3.2.0</version>
</dependency>
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>javase</artifactId>
  <version>3.2.0</version>
</dependency>

然后把生成二维码的方法写在工具类中,在我们使用的时候进行调用

工具类代码如下:

public class QRCodeUtil {
   private static final String CHARSET = "utf-8";
   private static final String FORMAT_NAME = "JPG";
   // 二维码尺寸
   private static final int QRCODE_SIZE = 300;


/**
 * 生成二维码图片
 * @param content 二维码内容
 * @param imgPath 图片地址
 * @param needCompress 是否压缩
 * @return
 * @throws Exception
 */
private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception {

    Hashtable hints = new Hashtable();
    //容错率等级从大到小的顺序:L>M>Q>H
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
    hints.put(EncodeHintType.MARGIN, 1);
    //生成二维码
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
            hints);
    int width = bitMatrix.getWidth();
    int height = bitMatrix.getHeight();
    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) ? 0xFF000000 : 0xFFFFFFFF);
        }
    }
    if (imgPath == null || "".equals(imgPath)) {
        return image;
    }

    return image;
}



public static void encode(String content, String imgPath, OutputStream output, boolean needCompress)
        throws Exception {
    BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);
    ImageIO.write(image, FORMAT_NAME, output);
 }

public static void encode(String content, OutputStream output) throws Exception {
    QRCodeUtil.encode(content, null, output, false);
 }

}

调用工具类:

@RestController
public class QRCodeTestController {
/**
 * 根据 url 生成 普通二维码
 */
@RequestMapping(value = "/createCommonQRCode")
public void createCommonQRCode(HttpServletResponse response, String url) throws Exception {
    ServletOutputStream stream = null;
    try {
        stream = response.getOutputStream();
        //使用工具类生成二维码
        QRCodeUtil.encode(url, stream);
    } catch (Exception e) {
        e.getStackTrace();
    } finally {
        if (stream != null) {
            stream.flush();
            stream.close();
        }

    }
 }
}

url为网页的链接,我们这里只需要传一下参数即可自动生成二维码。
生成的二维码如下图:
在这里插入图片描述

以上是关于用Spring Boot+ZXing生成二维码的主要内容,如果未能解决你的问题,请参考以下文章

用Spring Boot+ZXing生成二维码

用Spring Boot+ZXing生成二维码

spring boot使用zxing 二维码应用

java zxing实现二维码生成和解析zxing实现二维码生成和解析

ZXing-core生成二维码和解析

android中使用Zxing库生成二维码二维码和二维码四的区别