Java 生成二维码图片

Java 生成二维码图片

准备

依赖配置pom

1
2
3
4
5
6
7
8
9
10
<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>

生成二维码并嵌入

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class QRCodeWithLogo {
public static void main(String[] args) throws Exception {
// 二维码内容
String content = "hello";
// 二维码图片宽度
int width = 300;
// 二维码图片高度
int height = 300;
// 二维码图片格式
String format = "png";
// 小图片路径
String logoPath = "logo.png";
// 小图片占二维码的比例
double ratio = 0.2;

// 定义二维码参数
MultiFormatWriter writer = new MultiFormatWriter();
Map<EncodeHintType,Object> hint =new HashMap<>();
hint.put(EncodeHintType.MARGIN,2);
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height,hint);

// 加载小图片
BufferedImage logoImage = ImageIO.read(new File(logoPath));
int logoWidth = logoImage.getWidth();
int logoHeight = logoImage.getHeight();

// 计算小图片在二维码中的位置和大小
int x = (int) ((width - logoWidth * ratio) / 2);
int y = (int) ((height - logoHeight * ratio) / 2);
int w = (int) (logoWidth * ratio);
int h = (int) (logoHeight * ratio);

// 创建一个空白的BufferedImage对象,并获取其Graphics2D对象
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();

// 设置背景色
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, width, height);
// 设置前景色
g2d.setColor(Color.BLACK);

// 将二维码绘制到空白的BufferedImage对象上
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (matrix.get(i, j)) {
g2d.fillRect(i, j, 1, 1);
}
}
}

// 将小图片绘制到二维码中央
g2d.drawImage(logoImage, x, y, w, h, null);

// 释放资源
g2d.dispose();

// 输出二维码图片
ImageIO.write(image, format, new File("qrcode.png"));
}
}

生成二维码

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
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class MyClass {
public static void main(String[] args) throws Exception {
// 定义二维码的内容和图片格式
String content = "Hello, world!";
String format = "png";

// 定义二维码的宽度和高度
int width = 200;
int height = 200;

// 定义二维码的参数
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height);

// 定义二维码的输出文件
File outputFile = new File("qrcode.png");

// 将二维码写入输出文件
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, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
ImageIO.write(image, format, outputFile);

System.out.println("二维码已生成,文件名为 qrcode.png");
}
}

利用hutool 生成二维码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

import cn.hutool.core.util.IdUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;

import java.io.File;

public class QRCodeDemo {
public static void main(String[] args) {
// 二维码内容
String content = "hello";
// 二维码文件保存路径
String filePath = IdUtil.simpleUUID() + ".png";
// 二维码图片大小
int width = 300;
int height = 300;

// 生成二维码并保存到文件
QrCodeUtil.generate(content, width, height, new File(filePath));
System.out.println(filePath);
}
}

Java 生成二维码图片
https://github.com/i-xiaoxin/2023/05/15/Java 生成二维码图片/
作者
xiaoxinlore
发布于
2023年5月15日
许可协议