package com.ruoyi.payment.infrastructure.util;
|
|
import com.google.zxing.BarcodeFormat;
|
import com.google.zxing.EncodeHintType;
|
import com.google.zxing.WriterException;
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
import com.google.zxing.common.BitMatrix;
|
import com.google.zxing.qrcode.QRCodeWriter;
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
import org.springframework.stereotype.Component;
|
|
import javax.imageio.ImageIO;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.util.Base64;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 二维码生成工具
|
*
|
* @author ruoyi
|
*/
|
@Component
|
public class QrCodeUtil {
|
|
/**
|
* 生成二维码Base64字符串
|
*
|
* @param content 二维码内容
|
* @param size 尺寸
|
* @return Base64字符串
|
*/
|
public String generateQrCodeBase64(String content, int size) {
|
try {
|
// 配置参数
|
Map<EncodeHintType, Object> hints = new HashMap<>();
|
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
|
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
|
hints.put(EncodeHintType.MARGIN, 1);
|
|
// 生成二维码
|
QRCodeWriter qrCodeWriter = new QRCodeWriter();
|
BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size, hints);
|
|
// 转换为图片
|
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
|
|
// 转换为Base64
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ImageIO.write(bufferedImage, "PNG", baos);
|
byte[] bytes = baos.toByteArray();
|
String base64String = Base64.getEncoder().encodeToString(bytes);
|
|
return "data:image/png;base64," + base64String;
|
} catch (WriterException | IOException e) {
|
throw new RuntimeException("二维码生成失败", e);
|
}
|
}
|
}
|