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 }