在pom.xml导入zxing包
<!-- 生成二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.1</version>
</dependency>
QRCodeUtils 二维码 工具类
import com.google.zxing.*;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.commons.codec.binary.Base64;
import org.springframework.stereotype.Component;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author HaleyHa
* @date 2021/12/10 19:18
* @description 二维码 工具类
*
* **/
@Component
public class QRCodeUtils {
//日志
// private static final Logger logger = LoggerFactory.getLogger(QRCodeUtils.class);
//二维码颜色
private static final int BLACK = 0xFF000000;
//二维码颜色
private static final int WHITE = 0xFFFFFFFF;
//二维码宽
private static final int width = 200;
//二维码高
private static final int height = 200;
//二维码生成格式
private static final String imageType = "png";
/**
* 生成二维码
* @param text 二维码内容
*/
public static String zxingCodeCreate(String text) throws Exception{
HashMap map = new HashMap();
//EncodeHintType枚举类 纠错程度(使得其精度增加)
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//字符编码
map.put(EncodeHintType.CHARACTER_SET,"utf-8");
//二维码边距
map.put(EncodeHintType.MARGIN,1);
//生成二维码
BitMatrix encode = new MultiFormatWriter().encode(text,BarcodeFormat.QR_CODE,width,height);
int codeWidth = encode.getWidth();
int codeHeight = encode.getHeight();
BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);// BufferedImage.TYPE_INT_RGB 颜色参数
for (int i = 0; i < codeWidth; i++) {
for (int j = 0; j < codeHeight; j++) {
//4、循环将二维码内容定入图片
image.setRGB(i, j, encode.get(i, j) ? BLACK : WHITE);
}
}
return imageToString(image);
}
//把image对象转换成Base64方法
public static String imageToString(BufferedImage image) throws IOException{
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image,imageType,os);
return Base64.encodeBase64String(os.toByteArray());
}
}
控制类QRCodeController
import com.coupon.dto.Result;
import com.coupon.util.QRCodeUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author HaleyHa
* @date 2021/12/11 16:26
* @description: 二维码管理模块
*/
//@SuppressWarnings("all")
@RestController
@RequestMapping("/qrcode")
@Api(tags = "二维码管理")
public class QRCodeController {
@Autowired
QRCodeUtils qrCodeUtils;
// @ResponseBody
@ApiOperation(value = "生成二维码")
@PostMapping("/create")
public String createQRCode(@RequestParam(value = "text")String text) throws Exception {
return qrCodeUtils.zxingCodeCreate(text);
}
}
前端页面实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单文件上传</title>
</head>
<style>
image[src=""],img:not([src]){
opacity: 0;
}
</style>
<body>
<input type="text" id="text" placeholder="请输入">
<img src="" id="preview_photo" width="200px" height="200px">
<ul>
<li><input type="button" id="normal" value="生成普通二维码" onclick="upload('normal')"></li>
</ul>
</body>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function upload(flag) {
var formData = new FormData();
formData.append('text',document.getElementById('text').value);
// formData.append('flag',flag);
$.ajax({
url:"http://localhost:8001/qrcode/create",
type:"post",
data:formData,
contentType:false,
processData:false,
success:function(data) {
$("#preview_photo").attr("src","data:image/png;base64,"+data);
},
error:function(data){
alert("上传失败")
}
})
}
</script>
</html>
参考资料:
b站视频:https://www.bilibili.com/video/BV1ez4y1S7h7?from=search&seid=13314849704773297464&spm_id_from=333.337.0.0
csdn资料:https://blog.csdn.net/weixin_42290280/article/details/90731220