<!--二維碼生成架包引用--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.3</version> </dependency>
package com.xuebusi.toutiao.admin.api.common.util; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; /** * 使用谷歌的zxing生成二維碼工具類 */ public class QRCodeUtil { // 二維碼寬度 private static final int width = 100; // 二維碼高度 private static final int height = 100; // 二維碼默認文件格式 private static final String format = "png"; // 二維碼參數 private static final Map<EncodeHintType, Object> hints = new HashMap(); static { // 字符編碼 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 容錯等級:L、M、Q、H,其中L最低,H最高 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 二維碼圖片邊距 hints.put(EncodeHintType.MARGIN, 2); } /** * 返回一個BufferedImage對象 * * @param content 二維碼內容 * @param width 寬 * @param height 高 * @return BufferedImage * @throws WriterException */ public static BufferedImage toBufferedImage(String content, int width, int height) throws WriterException { BitMatrix bitMatrix = buildBitMatrix(content, width, height); return MatrixToImageWriter.toBufferedImage(bitMatrix); } /** * 將二維碼輸出到一個流中 * * @param content 二維碼內容 * @param stream 輸出流 * @param width 寬 * @param height 高 * @throws WriterException * @throws IOException */ public static void writeToStream(String content, OutputStream stream, int width, int height) throws WriterException, IOException { BitMatrix bitMatrix = buildBitMatrix(content, width, height); MatrixToImageWriter.writeToStream(bitMatrix, format, stream); } private static BitMatrix buildBitMatrix(String content, int width, int height) throws WriterException { if (content == null || content.trim().length() == 0) { throw new IllegalArgumentException("二維碼內容不能為空"); } return new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); } /** * 生成二維碼圖片文件 * * @param content 二維碼內容 * @param path 文件保存路徑 * @param width 寬 * @param height 高 * @throws WriterException * @throws IOException */ public static void createQRCode(String content, String path, int width, int height) throws WriterException, IOException { BitMatrix bitMatrix = buildBitMatrix(content, width, height); MatrixToImageWriter.writeToPath(bitMatrix, format, new File(path).toPath()); } public static void main(String[] args) { try { QRCodeUtil.createQRCode("https://sina.cn", "D:\\sina.png", width, height); System.out.println("生成二維碼成功"); } catch (WriterException | IOException e) { System.out.println(e.getMessage()); } } }
