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 }