java生成二维码
1. 添加maven依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.0</version></dependency>
2. 代码
package com.pdf.demo.pdfutils.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Hashtable;
public class QRCodeImageUtils {
/**
* 生成二维码对于的字节数组
*
* @param content 二维码内容
* @param width 二维码宽度
* @param height 二维码高度
* @param margin 边距大小单位为像素
* @return 二维码图片对应的字节数组
* @throws WriterException 写入异常
* @throws IOException i/o 异常
*/
public static byte[] genImageByteArray(String content, int width, int height, Integer margin) throws WriterException, IOException {
// 生成二维码矩阵
BitMatrix bitMatrix = doGenImage(content, width, height, margin);
ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
// 生成图片并写入流中
MatrixToImageWriter.writeToStream(bitMatrix, "JPG", pngOutputStream);
// 获取二维码字节数组
return pngOutputStream.toByteArray();
}
/**
* 生成二维码并保持到指定文件中
*
* @param content 二维码内容
* @param width 二维码宽度
* @param height 二维码高度
* @param margin 边距大小单位为像素
* @throws WriterException 写入异常
* @throws IOException i/o 异常
*/
public static void genAndSaveFile(String content, int width, int height, Integer margin, String filePath) throws WriterException, IOException {
// 生成二维码矩阵
BitMatrix bitMatrix = doGenImage(content, width, height, margin);
// 获取文件路径对象
Path path = FileSystems.getDefault().getPath(filePath);
// 保存图片
MatrixToImageWriter.writeToPath(bitMatrix, "JPG", path);
}
/**
* 生成二维码并获取二维码的输入流
*
* @param content 二维码内容
* @param width 二维码宽度
* @param height 二维码高度
* @param margin 边距大小单位为像素
* @return 二维码的输流
* @throws WriterException 写入异常
* @throws IOException i/o 异常
*/
public static InputStream genImageStream(String content, int width, int height, Integer margin) throws WriterException, IOException {
return new ByteArrayInputStream(genImageByteArray(content, width, height, margin));
}
/**
* 生成二维码对应的字节矩阵
*
* @param content 二维码内容
* @param width 二维码宽度
* @param height 二维码高度
* @return 二维码位矩阵
* @throws WriterException 写入异常
*/
private static BitMatrix doGenImage(String content, int width, int height) throws WriterException {
return doGenImage(content, width, height, null);
}
/**
* 生成二维码对应的字节矩阵
*
* @param content 二维码内容
* @param width 二维码宽度
* @param height 二维码高度
* @param margin 边距大小 单位为像素
* @return 二维码位矩阵
* @throws WriterException 写入异常
*/
private static BitMatrix doGenImage(String content, int width, int height, Integer margin) throws WriterException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
// 出差纠正等级
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 文本编码格式
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
if (margin != null) {
// 边缘空白大小
hints.put(EncodeHintType.MARGIN, margin);
}
// 生成字节矩阵
return qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
}
}