前言
根据公司业务需求,需要将指定的url催缴二维码,于是有了以下总结,作为一个记录,以便以后可以用到哦!
一、将url直接生成二维码
package com.xiaojukeji.it.common.util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import javax.imageio.ImageIO;
import javax.swing.filechooser.FileSystemView;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class QrCodeUtil {
public static void mainString[] args) {
String url = "http://www.baidu.com";
String path = FileSystemView.getFileSystemView).getHomeDirectory) + File.separator + "testQrcode";
String fileName = "temp.jpg";
createQrCodeurl, path, fileName);
}
public static void createQrCodeString url,String path,String fileName) {
try {
Map<EncodeHintType, String> hints = new HashMap<>);
hints.putEncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter).encodeurl, BarcodeFormat.QR_CODE, 400, 400, hints);
File file = new Filepath, fileName);
if file.exists) || file.getParentFile).exists) || file.getParentFile).mkdirs)) && file.createNewFile))) {
writeToFilebitMatrix, "jpg", file);
System.out.println"二维码图片:" + file);
}
} catch Exception e) {
e.printStackTrace);
}
}
static void writeToFileBitMatrix matrix, String format, File file) throws IOException {
BufferedImage image = toBufferedImagematrix);
if !ImageIO.writeimage, format, file)) {
throw new IOException"Could not write an image of format " + format + " to " + file);
}
}
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
private static BufferedImage toBufferedImageBitMatrix matrix) {
int width = matrix.getWidth);
int height = matrix.getHeight);
BufferedImage image = new BufferedImagewidth, height, BufferedImage.TYPE_INT_RGB);
for int x = 0; x < width; x++) {
for int y = 0; y < height; y++) {
image.setRGBx, y, matrix.getx, y) ? BLACK : WHITE);
}
}
return image;
}
}
二、将url生成二维码并以base64返回
上面的方法只能够将url生成二维码,但是如果将此结果返回给前端的话,是无法直接展示的,因为前端需要接收一个base64的字符串,所以下面的方法诞生了
public static String methodsString str) {
MultiFormatWriter multiFormatWriter = new MultiFormatWriter);
Map hints = new HashMap);
hints.putEncodeHintType.CHARACTER_SET, "UTF-8"); //设置字符集编码类型
hints.putEncodeHintType.MARGIN, 1); //设置白边
BitMatrix bitMatrix = null;
try {
bitMatrix = multiFormatWriter.encodestr, BarcodeFormat.QR_CODE, 300, 300, hints);
BufferedImage image = toBufferedImagebitMatrix);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream);
//输出二维码图片流
try {
ImageIO.writeimage, "png", outputStream);
return Base64.encodeBase64StringoutputStream.toByteArray));
} catch IOException e) {
e.printStackTrace);
}
} catch WriterException e1) {
e1.printStackTrace);
}
return null;
}
public static BufferedImage toBufferedImageBitMatrix matrix) {
int width = matrix.getWidth);
int height = matrix.getHeight);
BufferedImage image = new BufferedImagewidth, height,
BufferedImage.TYPE_INT_RGB);
for int x = 0; x < width; x++) {
for int y = 0; y < height; y++) {
image.setRGBx, y, matrix.getx, y) ? 0xFF000000 : 0xFFFFFFFF);//0xFF000000黑;0xFFFFFFFF白
}
}
return image;
}
public static void mainString[] args) {
String methods = methods"http://www.baidu.com"");
System.out.printlnmethods);
}
这样就大功告成啦!