二维码生成的方式有多种,今天博主来介绍其中一种的使用方法。
首先,我们在pom.xml中插入以下代码来下载其jar包支持:
<dependency>
<groupId>net.glxn</groupId>
<artifactId>qrgen</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
我们可以看到需要导入两种maven,博主在通过查看底层,发现,如果非得要生成二维码的话,单单引入第二个maven文件就行,那第一个maven是有什么作用呢?其实第一个maven文件相当于第二个maven文件的外包装,使用其可以减少许多代码量,使代码更加直观。
接下来看一下如何使用,下面,博主将写一个Controller类,读者要的话可以直接copy拿去用(记得先导上面的maven文件哦)。
package com.atimynyc.common;
import com.google.zxing.EncodeHintType;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.exception.QRGenerationException;
import net.glxn.qrgen.image.ImageType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
/**
* @author atimynyc
* @version 1.0
* @title 二维码生成Controller
* @email 495906027@qq.com
* @since 2018/12/12
*/
@Controller
@RequestMapping("qrCode/")
public class QrCodeController {
private static final Logger LOGGER = LoggerFactory.getLogger(QrCodeController.class);
/**
* 生成二维码
* @param res HttpServletResponse
* @param url 需要转换的url
* @param width 二维码宽度 默认250
* @param height 二维码高度 默认250
* @throws IOException
*/
@RequestMapping("makeQrCode")
public void makeQrCode(HttpServletResponse res, String url, Integer width, Integer height) throws IOException {
LOGGER.info("[二维码]====二维码生成 传入参数 url={} width={} height={}", url, width, height);
if (url == null || "".equals(url)) {
LOGGER.warn("[二维码]====传入url为空");
return;
}
width = (width == null ? 250 : width);
height = (height == null ? 250 : height);
if (url != null && !"".equals(url)) {
OutputStream stream = null;
try {
QRCode qrCode = QRCode.from(url);
//定义二维码的参数
qrCode.to(ImageType.PNG);
qrCode.withSize(width, height);
qrCode.withHint(EncodeHintType.CHARACTER_SET, "utf-8");
qrCode.withHint(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
qrCode.withHint(EncodeHintType.MARGIN, 2);
//生成二维码
stream = res.getOutputStream();
qrCode.writeTo(stream);
} catch (QRGenerationException e) {
e.printStackTrace();
LOGGER.warn("[二维码]====生成二维码时发生异常 e={}", e);
} finally {
if (stream != null) {
stream.flush();
stream.close();
}
}
}
}
}
那我们如何在前端获取呢?我们直接写个<img>标签,将其src的值设为调用该Controller的url就行。如下:
<img id="qrCode" class="pre-img" alt="二维码生成失败,请联系后台管理员" style="vertical-align: middle;height: 250px;display: block;">
<script>
var url = ;//你要生成二维码的url是什么就写什么,比如:http://www.baidu.com
var width = 250;
var height = 250;
$("#qrCode").attr("src","(这里填你自己的项目url前缀)/qrCode/makeQrCode?url="+url+"&width="+width+"&height="+height);
</script>