java如何生成二维码
生成二维码的基本方法
在Java中生成二维码可以通过第三方库实现,常用的库包括ZXing(Zebra Crossing)和QRGen。ZXing是一个功能强大的开源库,支持多种条形码和二维码的生成与解析。
使用ZXing库生成二维码
确保项目中已添加ZXing依赖。对于Maven项目,在pom.xml中添加以下依赖:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
生成二维码的核心代码示例:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
public class QRCodeGenerator {
public static void generateQRCode(String text, int width, int height, String filePath) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
}
使用QRGen简化操作
QRGen是基于ZXing的封装库,提供更简洁的API。添加QRGen依赖:
<dependency>
<groupId>io.github.g0dkar</groupId>
<artifactId>qrcode-kotlin-jvm</artifactId>
<version>3.2.0</version>
</dependency>
生成二维码的简化代码:

import io.github.g0dkar.qrcode.QRCode;
import java.io.FileOutputStream;
public class SimpleQRGen {
public static void createQR(String data, String outputPath) throws Exception {
new QRCode(data).render().writeTo(new FileOutputStream(outputPath));
}
}
自定义二维码样式
通过ZXing可以调整二维码的颜色、边距等属性。例如修改颜色和边距:
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
public class CustomQRCode {
public static BufferedImage createCustomQR(String text, int size, int margin) throws WriterException {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.MARGIN, margin);
QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = writer.encode(text, BarcodeFormat.QR_CODE, size, size, hints);
return MatrixToImageWriter.toBufferedImage(matrix);
}
}
生成二维码并嵌入Logo
在二维码中心嵌入Logo的示例:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class QRCodeWithLogo {
public static void addLogo(BufferedImage qrImage, String logoPath, String outputPath) throws IOException {
BufferedImage logo = ImageIO.read(new File(logoPath));
Graphics2D g = qrImage.createGraphics();
int x = (qrImage.getWidth() - logo.getWidth()) / 2;
int y = (qrImage.getHeight() - logo.getHeight()) / 2;
g.drawImage(logo, x, y, null);
g.dispose();
ImageIO.write(qrImage, "PNG", new File(outputPath));
}
}
注意事项
- 二维码尺寸不宜过小,建议至少
200x200像素以保证可扫描性。 - 纠错级别可通过
EncodeHintType.ERROR_CORRECTION设置,可选L(7%)、M(15%)、Q(25%)、H(30%)。 - 避免在二维码中存储敏感信息,因其可被任何人扫描。






