一、引入二维码生成需要的jar
<!-- 二维码相关 -->
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
二、生成二维码的图片流工具类
/**
* 生成二维码的图片流
*
* @param url
* @param resp
* @return
*/
public static BitMatrix generateQRCodeStream(String content, HttpServletResponse resp) {
// 给响应添加头部信息,主要是告诉浏览器返回的是图片流
resp.setHeader("Cache-Control", "no-store");
resp.setHeader("Pragma", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/png");
// 设置图片的文字编码以及内边框距
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix;
try {
// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300, hints);
} catch (WriterException e) {
e.printStackTrace();
return null;
}
return bitMatrix;
}
三、使用工具类
/**
* 生成商品的消费凭证二维码,供操作员扫描,证明已消费,微信扫一扫就能链接到对应的URL里面
*
*
* @param request
* @param response
*/
@RequestMapping(value = "/generateqrcode4product", method = RequestMethod.GET)
@ResponseBody
private void generateQRCode4Product(HttpServletRequest request, HttpServletResponse response) {
...
BitMatrix qRcodeImg = CodeUtil.generateQRCodeStream("二维码信息", response);
// 将二维码以图片流的形式输出到前端(二维码,类型,输入流 )
MatrixToImageWriter.writeToStream(qRcodeImg, "png", response.getOutputStream());
...
}
四、前端显示
if (data.needQRCode) {
// 若顾客已登录,则生成购买商品的二维码供商家扫描
imgListHtml += '<div> <img src="/o2o/frontend/generateqrcode4product?productId='
+ product.productId
+ '" width="100%"/></div>';
}
$('#imgList').html(imgListHtml);
五、显示方式
1、将二维码生成图片保存在前端展示
2、后端生成二维码的字节码信息传到前端,前端通过字节码信息转换成二维码