<!--二维码生成架包引用-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>

 

package com.xuebusi.toutiao.admin.api.common.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.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

/**
* 使用谷歌的zxing生成二维码工具类
*/
public class QRCodeUtil {
// 二维码宽度
private static final int width = 100;
// 二维码高度
private static final int height = 100;
// 二维码默认文件格式
private static final String format = "png";
// 二维码参数
private static final Map<EncodeHintType, Object> hints = new HashMap();

static {
// 字符编码
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 容错等级:L、M、Q、H,其中L最低,H最高
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 二维码图片边距
hints.put(EncodeHintType.MARGIN, 2);
}

/**
* 返回一个BufferedImage对象
*
* @param content 二维码内容
* @param width 宽
* @param height 高
* @return BufferedImage
* @throws WriterException
*/
public static BufferedImage toBufferedImage(String content, int width, int height) throws WriterException {
BitMatrix bitMatrix = buildBitMatrix(content, width, height);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}

/**
* 将二维码输出到一个流中
*
* @param content 二维码内容
* @param stream 输出流
* @param width 宽
* @param height 高
* @throws WriterException
* @throws IOException
*/
public static void writeToStream(String content, OutputStream stream, int width, int height) throws WriterException, IOException {
BitMatrix bitMatrix = buildBitMatrix(content, width, height);
MatrixToImageWriter.writeToStream(bitMatrix, format, stream);
}

private static BitMatrix buildBitMatrix(String content, int width, int height) throws WriterException {
if (content == null || content.trim().length() == 0) {
throw new IllegalArgumentException("二维码内容不能为空");
}
return new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
}

/**
* 生成二维码图片文件
*
* @param content 二维码内容
* @param path 文件保存路径
* @param width 宽
* @param height 高
* @throws WriterException
* @throws IOException
*/
public static void createQRCode(String content, String path, int width, int height) throws WriterException, IOException {
BitMatrix bitMatrix = buildBitMatrix(content, width, height);
MatrixToImageWriter.writeToPath(bitMatrix, format, new File(path).toPath());
}

public static void main(String[] args) {
try {
QRCodeUtil.createQRCode("https://sina.cn", "D:\\sina.png", width, height);
System.out.println("生成二维码成功");
} catch (WriterException | IOException e) {
System.out.println(e.getMessage());
}
}
}