1. 引入包:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
2.生成二维码需要依赖的类,懒得引包,直接抽出来MatrixToImageWriter.java :
import com.google.zxing.common.BitMatrix;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;
public final class MatrixToImageWriter {
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
private MatrixToImageWriter() {}
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) ? BLACK : WHITE);
}
}
return image;
}
public static void writeToFile(BitMatrix matrix, String format, File file)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, file)) {
throw new IOException("Could not write an image of format " + format + " to " + file);
}
}
public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, stream)) {
throw new IOException("Could not write an image of format " + format);
}
}
}
3. 接口
@RequestMapping("getBarCode")
public String getBarCode(HttpServletRequest request, HttpServletResponse response){
String str = request.getParameter("需要转换成二维码的数据")
QRCodeWriter qrCodeWriter = new QRCodeWriter();
//设置参数,输出文件
HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 2); // 设置图片的边距,白边的大小,越小越好,否则白边太大二维码就看起来很小
//设置二维码图片宽高
BitMatrix bitMatrix = qrCodeWriter.encode(str, BarcodeFormat.QR_CODE,100, 100, hints);
//输出到文件
//File file1 = new File("d://img//" ,"my.jpg");
//MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1); 直接去d盘下的img文件夹下去看二维码,如果没有img文件夹要么代码中建要么手动建
// 写到输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
//转换为base64 ---把qrCodeImage返回到页面直接使用img标签进行展示,这样可以省去保存本地的步骤
//
Base64.Encoder encoder1 = Base64.getEncoder();
String qrCodeImage = "data:image/jpeg;base64,"+encoder1.encodeToString(outputStream.toByteArray());
request.setAttribute("barcode", qrCodeImage);
return "xxx.html";
}
html中直接使用img标签显示就行,src就是Base64格式的字符串
<img alt="qrcode" src="${barcode}" />