导入依赖
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.0</version> </dependency>编写工具类CodeImageUtil
import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; 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; public class CodeImageUtil { // 默认二维码宽度 public static final int WIDTH = 300; // 默认二维码高度 public static final int HEIGHT = 300; // 默认二维码文件格式 public static final String FORMAT = "png"; // 二维码参数 public static final Map<EncodeHintType, Object> HINTS = new HashMap<EncodeHintType, Object>(); // 初始化编码格式等参数 static { // 字符编码 HINTS.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 纠错的等级 L > M > Q > H 纠错的能力越高可存储的越少,一般使用M HINTS.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 二维码与图片边距 HINTS.put(EncodeHintType.MARGIN, 2); } /** * * @description:功能描述 将二维码写出到输出流中 * @param content 二维码内容即要存储在二维码中的内容(扫描二维码之后获取的内容) * @param stream 输出流 * @param width 二维码宽 * @param height 二维码高 * @throws WriterException * @throws IOException @see: 需要参见的其它内容 */ public static void writeToStream(String content, OutputStream stream, Integer width, Integer height) throws WriterException, IOException { if (width == null) { width = WIDTH; } if (height == null) { height = HEIGHT; } BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, HINTS); MatrixToImageWriter.writeToStream(bitMatrix, FORMAT, stream); } }测试
public class test { public static void main(String[] args) { // 生成二维码 String url = "https://www.baidu.com/"; String fileName = "二维码.png"; ByteArrayOutputStream out = new ByteArrayOutputStream(); // 生成二维码图片 try { CodeImageUtil.writeToStream(url, out, 300, 300); InputStream in = new ByteArrayInputStream(out.toByteArray()); // 将生成的二维码写入图片,也可直接使用流 String filePath = "C:\\aaa\\" + fileName; FileOutputStream fos = new FileOutputStream(filePath); int length; byte[] b = new byte[1024]; while ((length = in.read(b)) > 0) { fos.write(b, 0, length); } fos.flush(); in.close(); fos.close(); } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("success"); } }