【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)生成效果
访问效果为浏览器打开当前页面