概述
一、导入依赖
原始库 javase内部封装可调用这个库
代码语言:javascript复制<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
二、utils工具类
使用其中一个就可以,其他的只是参数不同,用来调整生成二维码的宽高,颜色的。content是一个字符串
代码语言:javascript复制package com.qf.push.gua;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
/**
* zt
* 2020/12/15
* 9:39
* 二维码工具类
*/
public class QRCodeUtils {
/**
* 生成二维码的方法
*/
public static BufferedImage qr(String content){
//定义二维码的宽、高
int width = 300;
int height = 300;
//EncodeHintType 它是一个二维码的特征信息常量
Map<EncodeHintType,Object> hints = new HashMap<>();
//比如,纠错能力
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN,1);
BitMatrix bitMatrix = null;
try {
//生成一个二维码的工具
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,hints);
//第一个参数是信息块的颜色
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0X00FFFFFF,0XFFFFFFFF);
//第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
return bufferedImage;
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
/**
* 生成二维码的方法
*/
public static BufferedImage qr3(String content, Color color){
//定义二维码的宽、高
int width = 300;
int height = 300;
//EncodeHintType 它是一个二维码的特征信息常量
Map<EncodeHintType,Object> hints = new HashMap<>();
//比如,纠错能力
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN,1);
BitMatrix bitMatrix = null;
BufferedImage bufferedImage = null;
try {
//生成一个二维码的工具
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,hints);
//第一个参数是信息块的颜色
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(color.getRGB(),0XFFFFFFFF);
//第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
} catch (WriterException e) {
e.printStackTrace();
}
return bufferedImage;
}
/**
* 生成二维码的方法
*/
public static BufferedImage qr2(String content, Color color,int w,int h){
//定义二维码的宽、高
//EncodeHintType 它是一个二维码的特征信息常量
Map<EncodeHintType,Object> hints = new HashMap<>();
//比如,纠错能力
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN,1);
BitMatrix bitMatrix = null;
try {
//生成一个二维码的工具
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, w, h,hints);
//第一个参数是信息块的颜色
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(color.getRGB(),0XFFFFFFFF);
//第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
return bufferedImage;
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
}
三、QRController
代码语言:javascript复制package com.qf.push.gua;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
/**
* zt
* 2020/12/15
* 9:49
*/
@Controller
@RequestMapping("/qrcode")
public class QRController {
@RequestMapping("/show")
public void qrcode(HttpServletResponse response) throws IOException {
//生成一个二维码图片
BufferedImage buff = QRCodeUtils.qr("https://www.baidu.com");
//把图片输出给浏览器
response.setContentType("image/png");
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(buff, "png", outputStream);
}
@RequestMapping("/show2")
public void qrcode2(HttpServletResponse response, @RequestParam String color) throws IOException {
//生成一个二维码图片
BufferedImage buff = null;
if("green".equalsIgnoreCase(color)){
buff=QRCodeUtils.qr3("https://www.baidu.com", Color.GREEN);
}else if("red".equalsIgnoreCase(color)){
buff=QRCodeUtils.qr3("https://www.baidu.com", Color.RED);
}else{
buff=QRCodeUtils.qr("https://www.baidu.com");
}
//把图片输出给浏览器
response.setContentType("image/png");
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(buff, "png", outputStream);
}
}