首先 hutool对zXing进行了封装,我这里直接选用hutool工具
hutool文档的介绍
1 首先导入依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
<version>5.7.18</version>
</dependency>
2 写好的工具类
public abstract class QRcodeUtil {
//二维码大小
private static final int QRCODE_SIZE = 300;
// LOGO宽度
private static final int WIDTH = 60;
// LOGO高度
private static final int HEIGHT = 60;
/**
* 生成二维码
*/
@SneakyThrows
public static String encode(String content) {
return QrCodeUtil.generateAsBase64(content,
new QrConfig(QRCODE_SIZE, QRCODE_SIZE).setErrorCorrection(ErrorCorrectionLevel.H),
ImgUtil.IMAGE_TYPE_JPG);
}
/**
* 生成代logo的二维码
*/
@SneakyThrows
public static String encode(String content, String logo) {
byte[] bytes = HttpUtil.downloadBytes(FmwConstant.ENV_URL + logo);
BufferedImage image = ImgUtil.toImage(bytes);
return QrCodeUtil.generateAsBase64(content,
new QrConfig(QRCODE_SIZE, QRCODE_SIZE).setErrorCorrection(ErrorCorrectionLevel.H),
ImgUtil.IMAGE_TYPE_JPG,
createLogo(image));
}
/**
* 压缩logo
*/
private static Image createLogo(Image src){
int width = src.getWidth(null);
int height = src.getHeight(null);
// 压缩LOGO
if (width > WIDTH) {
width = WIDTH;
}
if (height > HEIGHT) {
height = HEIGHT;
}
Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
return image;
}
}