Generate QR codes with Java. ZXing library, Spring Boot integration, enterprise-grade reliability.
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
public class QRCodeGenerator {
public static void generateQRCode(String text, String filePath)
throws Exception {
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, 512, 512);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG",
Paths.get(filePath));
System.out.println("QR Code generated: " + filePath);
}
public static void main(String[] args) throws Exception {
generateQRCode("https://example.com", "qrcode.png");
}
}
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN, 2);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(
"https://example.com",
BarcodeFormat.QR_CODE,
300, // width
300, // height
hints
);
import org.springframework.web.bind.annotation.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import java.io.ByteArrayOutputStream;
@RestController
@RequestMapping("/api/qr")
public class QRCodeController {
@GetMapping("/generate")
public ResponseEntity<byte[]> generateQR(
@RequestParam String data,
@RequestParam(defaultValue = "300") int size)
throws Exception {
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, size, size);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", baos);
return ResponseEntity
.ok()
.header("Content-Type", "image/png")
.body(baos.toByteArray());
}
}
@Service
public class QRCodeService {
public byte[] generateQRCode(String data, int size) throws Exception {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, size, size, hints);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", baos);
return baos.toByteArray();
}
}
public class BatchQRGenerator {
public static void generateBatch(List<String> urls, String outputDir)
throws Exception {
QRCodeWriter writer = new QRCodeWriter();
int index = 1;
for (String url : urls) {
BitMatrix bitMatrix = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300);
String filename = outputDir + "/qrcode_" + index + ".png";
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get(filename));
index++;
}
System.out.println("Generated " + urls.size() + " QR codes");
}
}
import com.google.zxing.BinaryBitmap;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
public class QRCodeReader {
public static String readQRCode(String imagePath) throws Exception {
BufferedImage image = ImageIO.read(new File(imagePath));
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Result result = new QRCodeReader().decode(bitmap);
return result.getText();
}
}
ErrorCorrectionLevel.L // ~7% recovery
ErrorCorrectionLevel.M // ~15% recovery
ErrorCorrectionLevel.Q // ~25% recovery
ErrorCorrectionLevel.H // ~30% recovery (recommended for print)