package com.hxh.basic.project.Test02;
import com.alibaba.fastjson.JSON;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.ByteArrayOutputStream;
import java.util.Hashtable;
public class Test {
public static void main(String[] args) {
String str = "123456";
getQRCodeImage(str);
}
/**
* QR_CODE_DEFAULT_WIDTH 二维码默认宽
*/
private static final int QR_CODE_DEFAULT_WIDTH = 320;
/**
* QR_CODE_DEFAULT_CHARSET 二维码默认的字符集
*/
private static final String QR_CODE_DEFAULT_CHARSET = "utf-8";
/**
* 生成二维码,返回字节流
*
* @param inputString
* @return String
*/
public static String getQRCodeImage(String inputString) {
System.out.println(String.format("UserServiceImpl.getQRCodeImage request inputString=%s", inputString));
String result = "";
try {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, QR_CODE_DEFAULT_CHARSET);
BitMatrix bitMatrix = qrCodeWriter.encode(inputString, BarcodeFormat.QR_CODE, QR_CODE_DEFAULT_WIDTH, QR_CODE_DEFAULT_WIDTH, hints);
bitMatrix = deleteWhite(bitMatrix);
ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "png", pngOutputStream);
result = "data:image/png;base64," + Base64.encode(pngOutputStream.toByteArray());
System.out.println(String.format("base64 res=%s", result));
} catch (Exception e) {
System.out.println(String.format("UserServiceImpl.getQRCodeImage exception! 错误信息=%s", e));
System.out.println(String.format("com.jd.crm.gateway.service.user.impl.UserServiceImpl.getQRCodeImage(java.lang.String):result=%s", JSON.toJSON(result)));
return "错误";
}
return result;
}
/**
* 二维码方法封装
*
* @param matrix
* @return BitMatrix
*/
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;
}
}
// TODO 输出:UserServiceImpl.getQRCodeImage request inputString=123456
// TODO 输出:base64 res=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOgAAADoAQAAAADN0pXVAAABEklEQVR42u3ZsRGDMAwFUHEUKRmBUTIaHo1RGIEyBYeCJDu2ORJjp/1qkuO5UhR/A0ShHmyfHc/hUkfQCh1Zaz503GhaO/mqtULrdLPmisaFR03QZpUaoP+rH1NoqyZj2rOzPl/tDNCCJnkUdtHrtIL+Vk5qsWSPBa1QGVNetc+82MTyi/xCaIVKO92w09M666TPppP/FaD3VHZRUe2zT3Yivw1AK5T5SHbrsw4v73Yz1EvLoRX6OWKSjanfBtJkh97SPH2ibudkhxY0OSPJJVHZUJf+fNqEljR9vpHkkYY8tEqz5xsu5pE9c4M2qDY36TO0WTXkOdxL2mkTel+z/344I426EFqj+buJ78kOLSj/qjdgrUGR/YlwbwAAAABJRU5ErkJggg==