引包
<dependency>
<groupId>QRCode</groupId>
<artifactId>QRCode</artifactId>
<version>3.0</version>
</dependency>
实现
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class QRCodeUtil {
// 设置编码格式
private static final String CHARSET = "utf-8";
// 设置二维码的大小
private static final int QRCODE_SIZE = 150;
public static BufferedImage createImage(String content) throws Exception {
// 创建一个图像缓冲区
BufferedImage bi = new BufferedImage(QRCODE_SIZE, QRCODE_SIZE, BufferedImage.TYPE_INT_RGB);
// 获取图像缓冲区的图形对象
Graphics2D g = bi.createGraphics();
try{
// 创建一个 Qrcode 对象
Qrcode qrcode = new Qrcode();
// 设置二维码的纠错级别 QR码的纠错级别有四种:L、M、Q、H,分别对应7%、15%、25%、30%的纠错能力。
// 要输入的内容越长,他的纠错级别就要越低,否则存不下那么多东西
qrcode.setQrcodeErrorCorrect('M');
// 设置二维码的编码模式
// 有三种选择,分别为N数字,A字符a-Z,B代表普通字符
qrcode.setQrcodeEncodeMode('B');
// 设置二维码的版本号
// 用于设置QR码的版本。版本参数是一个整数,范围在1到40之间,它控制了QR码的大小(最小的版本1是一个21x21的矩阵)
// 数字越大,二维码长得越复杂
qrcode.setQrcodeVersion(7);
// 将内容转换为字节数组
byte[] d = content.getBytes(CHARSET);
// 设置背景颜色为白色
g.setBackground(Color.WHITE);
// 清除图像缓冲区
g.clearRect(0, 0, QRCODE_SIZE, QRCODE_SIZE);
// 设置前景颜色为黑色
g.setColor(Color.BLACK);
// 判断内容的长度是否合法
if (d.length > 0 && d.length < 120) {
// 计算二维码的布尔矩阵
boolean[][] s = qrcode.calQrcode(d);
// 遍历矩阵的行
for (int i = 0; i < s.length; i++) {
// 遍历矩阵的列
for (int j = 0; j < s.length; j++) {
// 如果矩阵元素为真,表示该位置为黑色
if (s[j][i]) {
// 绘制一个小方块
g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
}
}
}
}
}catch (Exception ex){
throw new Exception(ex);
}finally {
// 释放图形对象资源
g.dispose();
// 刷新图像缓冲区
bi.flush();
}
// 返回图像缓冲区对象
System.out.println("111");
return bi;
}
public static void main(String[] args) throws Exception {
// 定义要生成二维码的内容
String content = "https://blog.youkuaiyun.com/qq_43813182";
// 调用 createImage 方法生成二维码图像
BufferedImage image = createImage(content);
// 将图像写入文件,格式为 png,文件名为 qrcode.png
ImageIO.write(image, "png", new File("qrcode4.png"));
}
}
运行
用微信扫描成功跳转