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 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); } } }