diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/CreateQrCodeUtil.java b/src/main/java/com/dreamchaser/depository_manage/utils/CreateQrCodeUtil.java new file mode 100644 index 00000000..431ee954 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/utils/CreateQrCodeUtil.java @@ -0,0 +1,55 @@ +package com.dreamchaser.depository_manage.utils; + +import cn.hutool.core.codec.Base64; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +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.Service; +import org.springframework.util.StringUtils; + +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.HashMap; + +/* + ** 二维码生成 + */ +public class CreateQrCodeUtil { + public String createQrCode(String content, int width, int height) throws IOException { + String resultImage = ""; + if (!StringUtils.isEmpty(content)) { + ServletOutputStream stream = null; + ByteArrayOutputStream os = new ByteArrayOutputStream(); + @SuppressWarnings("rawtypes") + HashMap hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定字符编码为“utf-8” + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定二维码的纠错等级为中级 + hints.put(EncodeHintType.MARGIN, 2); // 设置图片的边距 + try { + QRCodeWriter writer = new QRCodeWriter(); + BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints); + BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix); + ImageIO.write(bufferedImage, "png", os); + /** + * 原生转码前面没有 data:image/png;base64 这些字段,返回给前端是无法被解析,可以让前端加,也可以在下面加上 + */ + resultImage = new String("data:image/png;base64," + Base64.encode(os.toByteArray())); + return resultImage; + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (stream != null) { + stream.flush(); + stream.close(); + } + } + } + return null; + } +}