diff --git a/spring-boot-modules/spring-boot-libraries/pom.xml b/spring-boot-modules/spring-boot-libraries/pom.xml
index 021c74ddc0..ba5c87c782 100644
--- a/spring-boot-modules/spring-boot-libraries/pom.xml
+++ b/spring-boot-modules/spring-boot-libraries/pom.xml
@@ -131,6 +131,11 @@
jcache
${caffeine.version}
+
+ io.nayuki
+ qrcodegen
+ ${qrcodegen.version}
+
@@ -239,6 +244,7 @@
8.9.0
0.10.3
3.1.8
+ 1.8.0
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/BarcodesController.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/BarcodesController.java
index a1318c0519..8942e93d8b 100644
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/BarcodesController.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/BarcodesController.java
@@ -5,6 +5,7 @@ import com.baeldung.barcodes.generators.Barcode4jBarcodeGenerator;
import com.baeldung.barcodes.generators.QRGenBarcodeGenerator;
import com.baeldung.barcodes.generators.ZxingBarcodeGenerator;
import com.baeldung.barcodes.generators.ZxingBarcodeGeneratorWithText;
+import com.baeldung.barcodes.generators.QRCodegenGenerator;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
@@ -108,4 +109,10 @@ public class BarcodesController {
private ResponseEntity okResponse(BufferedImage image) {
return new ResponseEntity<>(image, HttpStatus.OK);
}
+
+ //QRCodegen
+ @PostMapping(value = "/qrcodegen/qrcode", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity qrcodegenQRCode(@RequestBody String barcode) throws Exception {
+ return okResponse(QRCodegenGenerator.generateQrcode(barcode));
+ }
}
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/generators/QRCodegenGenerator.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/generators/QRCodegenGenerator.java
new file mode 100644
index 0000000000..55f7d0bc77
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/barcodes/generators/QRCodegenGenerator.java
@@ -0,0 +1,36 @@
+package com.baeldung.barcodes.generators;
+
+import io.nayuki.qrcodegen.QrCode;
+
+import java.awt.image.BufferedImage;
+import java.util.Objects;
+
+public class QRCodegenGenerator {
+
+ public static BufferedImage generateQrcode(String barcodeText) throws Exception {
+ QrCode qrCode = QrCode.encodeText(barcodeText, QrCode.Ecc.MEDIUM);
+ BufferedImage img = toImage(qrCode, 4, 10);
+ return img;
+ }
+
+ public static BufferedImage toImage(QrCode qr, int scale, int border) {
+ return toImage(qr, scale, border, 0xFFFFFF, 0x000000);
+ }
+
+ private static BufferedImage toImage(QrCode qr, int scale, int border, int lightColor, int darkColor) {
+ Objects.requireNonNull(qr);
+ if (scale <= 0 || border < 0)
+ throw new IllegalArgumentException("Value out of range");
+ if (border > Integer.MAX_VALUE / 2 || qr.size + border * 2L > Integer.MAX_VALUE / scale)
+ throw new IllegalArgumentException("Scale or border too large");
+
+ BufferedImage result = new BufferedImage((qr.size + border * 2) * scale, (qr.size + border * 2) * scale, BufferedImage.TYPE_INT_RGB);
+ for (int y = 0; y < result.getHeight(); y++) {
+ for (int x = 0; x < result.getWidth(); x++) {
+ boolean color = qr.getModule(x / scale - border, y / scale - border);
+ result.setRGB(x, y, color ? darkColor : lightColor);
+ }
+ }
+ return result;
+ }
+}