1 import com.google.zxing.BarcodeFormat;
2 import com.google.zxing.EncodeHintType;
3 import com.google.zxing.MultiFormatWriter;
4 import com.google.zxing.WriterException;
5 import com.google.zxing.client.j2se.MatrixToImageWriter;
6 import com.google.zxing.common.BitMatrix;
7 import sun.misc.BASE64Encoder;
8 import java.io.ByteArrayOutputStream;
9 import java.io.IOException;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 public final class QrCodeUtils {
14
15 /**
16 * 生成二维码Png图片的Base64
17 *
18 * @param content 二维码内容
19 * @param width 宽
20 * @param height 高
21 * @return 二维码Png图片的Base64
22 */
23 public static String generateQrCodeBase64(String content, int width, int height) {
24 //设置图片的文字编码以及内边框
25 Map<EncodeHintType, Object> hints = new HashMap<>();
26 //编码
27 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
28 //边框距
29 hints.put(EncodeHintType.MARGIN, 0);
30
31 return generateQrCodeBase64(content, width, height, hints);
32 }
33
34 /**
35 * 生成二维码Png图片的Base64
36 *
37 * @param content 二维码内容
38 * @param width 宽
39 * @param height 高
40 * @param hints 自定义提供给编码器的其他参数
41 * @return 二维码Png图片的Base64
42 */
43 public static String generateQrCodeBase64(String content, int width, int height, Map<EncodeHintType, Object> hints) {
44 final BitMatrix bitMatrix;
45 String qrCode = "";
46 try {
47 bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
48 } catch (WriterException e) {
49 return qrCode;
50 }
51 try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
52 MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
53 byte[] bytes = outputStream.toByteArray();
54 // 2、将字节数组转为二进制
55 BASE64Encoder encoder = new BASE64Encoder();
56 qrCode = encoder.encodeBuffer(bytes).trim();
57 } catch (IOException e) {
58 e.printStackTrace();
59 }
60 return qrCode;
61 }
62 }