1、首先需要导入jar包
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.2</version>
</dependency>
2、工具类
package util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Hashtable;
public class QrCodeUtils {
public static byte[] creatRrCode(String contents, int width, int height) {
String binary = null;
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(
contents, BarcodeFormat.QR_CODE, width, height, hints);
// 1、读取文件转换为字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage image = toBufferedImage(bitMatrix);
//转换成png格式的IO流
ImageIO.write(image, "png", out);
byte[] bytes = out.toByteArray();
// 2、将字节数组转为二进制
return bytes;
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* image流数据处理
*
* @author ianly
*/
public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return image;
}
public static void main(String[] args) {
byte[] bytes = creatRrCode("http://www.baidu.com.cn", 200, 200);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File("d:/qrcode.png"));
fos.write(bytes);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
3、调用(页面直接使用<img>标签获取控制器生成的图片)
@RequestMapping("/makeQrCode")
public void qfCode(HttpServletRequest request,HttpServletResponse response) throws IOException {
byte[] bytes = QrCodeUtils.creatRrCode(“你想跳转的路径(可以配合前端传参数)”, 200, 200);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
BufferedImage bi1 = ImageIO.read(bais);
// 禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
try {
ImageIO.write(bi1, "jpg", response.getOutputStream());//不管输出什么格式图片,此处不需改动
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bais!=null){
bais.close();
}
}
}
页面js
function make() {
layer.open({
type:1,
area: ["400px","400px"],
title:"家政服务人员信用信息二维码生成",
shadeClose: false,
content:'<p style="text-align:center"><img src="${base}/makeQrCode"/></p>',
btn:['打印二维码','关闭'],
yes: function (index,layero) {
window.print();
},
btn2: function(){
window.close();
}
});
}