欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【SpringBoot学习】18、SpringBoot 使用 zxing 工具生成二维码,实现微信扫描可跳转

程序员文章站 2022-07-14 17:34:28
...

1、zxing 生成二维码

(1)相关依赖

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

(2)工具类

  • 生成的文件位置在项目根目录下的upload文件夹中,打包上线后就是在jar包的同级目录
  • 保存数据库的格式为/tmp/code/2020-10-26/9664f77b-4e1e-4d5c-804f-743f2cfe5ad9.png
  • 上面的文件路径返回给前端需要加上服务器的访问路径
import cn.hutool.core.date.DateUtil;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.UUID;

/**
 * 生成二维码
 *
 * @author Tellsea
 * @date 2020/10/25
 */
public class QrCodeGeneratorUtils {

    /**
     * 文件上传的保存路径
     */
    public static String UPLOAD_PATH = System.getProperty("user.dir") + File.separator + "upload" + File.separator;

    /**
     * 生成二维码,返回相对路径
     *
     * @param text
     * @return
     */
    public static String generateQRCodeImage(String text) {
        HashMap hashMap = new HashMap(16);
        // 设置二维码字符编码
        hashMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        // 设置二维码纠错等级
        hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 设置二维码边距
        hashMap.put(EncodeHintType.MARGIN, 1);
        try {
            // 开始生成二维码
            BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 300, 300, hashMap);

            String fileName = UUID.randomUUID() + ".png";
            String tempPath = "code" + File.separator + DateUtil.today() + File.separator;
            String targetPath = UPLOAD_PATH + tempPath;
            File fileDir = new File(targetPath);
            if (!fileDir.exists()) {
                fileDir.mkdirs();
            }

            // 导出到指定目录
            MatrixToImageWriter.writeToPath(bitMatrix, "png", new File(targetPath + fileName).toPath());

            return ("/tmp/" + tempPath + fileName).replace("\\", "/");
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String text = "";
        // 扫码查看当前文章
        text = "https://tellsea.4kb.cn/wx/customerGroup/customerCodeOk?customerGroupId=1";
        System.out.println(QrCodeGeneratorUtils.generateQRCodeImage(text));
    }
}

(3)生成效果

访问效果为浏览器打开当前页面
【SpringBoot学习】18、SpringBoot 使用 zxing 工具生成二维码,实现微信扫描可跳转