首先引入com.google.zxing
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
/**
*
* @param text 图片路径
* @param width 宽
* @param height 高
* @param filePath 图片存的本地路径例如 D:/imgs/123456.PNG
* @throws WriterException
* @throws IOException
*/
//生成图片
private static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
//生成base64
private static String generateQRCodeImages(String text, int width, int height) throws WriterException, IOException {
String binary = null;
QRCodeWriter qrCodeWriter = new QRCodeWriter();
//调整白边大小
/* Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height,hints);*/
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
ByteArrayOutputStream out = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix,"PNG",out);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(out.toByteArray());
byte[] bytes = new byte[out.size()];
byteArrayInputStream.read(bytes);
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(bytes);
return base64;
}
public static void main(String[] args) {
String cc= generateQRCodeImages(“图片路径”, 350, 350);
cc = cc.replaceAll("[\\t\\n\\r]","");
System.out.println("data:image/png;base64,"+cc);
}
/**
* 删除白边
* */
private static BitMatrix deleteWhite(BitMatrix matrix) {
int[] rec = matrix.getEnclosingRectangle();
int resWidth = rec[2] + 1;
int resHeight = rec[3] + 1;
BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i = 0; i < resWidth; i++) {
for (int j = 0; j < resHeight; j++) {
if (matrix.get(i + rec[0], j + rec[1]))
resMatrix.set(i, j);
}
}
return resMatrix;
}