【代码模板】二维码的生成
Kiml Lv5
  • 前言
    ZXing 是一个开源的,用 Java 编写的多格式的 1D / 2D 条码图像处理库,使用 ZXing 可以生成、识别 QR Code(二维码)。常用的二维码处理库还有 zbar,近几年已经不再更新代码,下边介绍 ZXing 生成二维码的方法。

  • 更新

1
24-06-28 初始记录

ZXing

  1. 引入依赖

1
2
3
4
5
6
7
8
9
10
11
<!-- 二维码生成&识别组件-->  
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
  1. 生成二维码方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class QRCodeUtil {  
/**
* 生成二维码
*
* @param content 二维码对应的URL
* @param width 二维码图片宽度
* @param height 二维码图片高度
* @return 二维码二进制流
*/
public String createQRCode(String content, int width, int height) throws IOException {
String resultImage = "";
// 除了尺寸,传入内容不能为空
if (!StringUtils.isEmpty(content)) {
ServletOutputStream stream = null;
ByteArrayOutputStream os = new ByteArrayOutputStream();
// 二维码参数
@SuppressWarnings("rawtypes")
HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
// 指定字符编码为“utf-8”
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// L M Q H四个纠错等级从低到高,指定二维码的纠错等级为M
// 纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的二维吗可储存的数据就会减少
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
// 设置图片的边距
hints.put(EncodeHintType.MARGIN, 1);

try {
// zxing生成二维码核心类
QRCodeWriter writer = new QRCodeWriter();
// 把输入文本按照指定规则转成二维吗
BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
// 生成二维码图片流
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
// 输出流
ImageIO.write(bufferedImage, "png", os);
/**
* 原生转码前面没有 data:image/png;base64 这些字段,返回给前端是无法被解析,所以加上前缀
*/
resultImage = new String("data:image/png;base64," + EncryptUtil.encodeBase64(os.toByteArray()));
return resultImage;
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(CommonErrorCode.E_200007);
} finally {
if (stream != null) {
stream.flush();
stream.close();
}
}
}
return null;
}
}
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量