Java实现二维码生成
废话不多说,直接上代码:
/**
* 功能描述: 生成二维码 BufferedImage.
*
* @param content
* @param qrWidth
* @param qrHeight
* @return java.awt.image.BufferedImage
* @author longshao
* @date 2019/5/31 9:13
*/
public static BufferedImage getBufferImage(String content, int qrWidth, int qrHeight) throws Exception {
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, qrWidth, qrHeight, hints);
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
BufferedImage image = new BufferedImage(qrWidth, qrHeight, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
log.debug("执行生成二维码 BufferedImage操作");
return image;
}
/**
* 功能描述: 生成base64格式二维码.
*
* @param content content
* @param qrWidth qrWidth
* @param qrHeight qrHeight
* @return string
* @author longshao
* @date 2019/5/31 9:18
*/
public static String getBase64(String content, int qrWidth, int qrHeight) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
BufferedImage image = getBufferImage(content, qrWidth, qrHeight);
//转换成png格式的IO流
ImageIO.write(image, "png", byteArrayOutputStream);
} catch (Exception e) {
e.printStackTrace();
}
byte[] bytes = byteArrayOutputStream.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encodeBuffer(bytes).trim();
base64 = "data:image/png;base64," + base64;
log.debug("执行生成base64格式二维码操作");
return base64;
}