Merge pull request #16455 from Michaelin007/qrcodegen

Generate QR Code in Java using QR-Code-Generator
This commit is contained in:
Maiklins 2024-04-24 22:26:46 +02:00 committed by GitHub
commit db34c4b3c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 49 additions and 0 deletions

View File

@ -131,6 +131,11 @@
<artifactId>jcache</artifactId>
<version>${caffeine.version}</version>
</dependency>
<dependency>
<groupId>io.nayuki</groupId>
<artifactId>qrcodegen</artifactId>
<version>${qrcodegen.version}</version>
</dependency>
</dependencies>
<repositories>
@ -239,6 +244,7 @@
<bucket4j.version>8.9.0</bucket4j.version>
<bucket4j-spring-boot-starter.version>0.10.3</bucket4j-spring-boot-starter.version>
<caffeine.version>3.1.8</caffeine.version>
<qrcodegen.version>1.8.0</qrcodegen.version>
</properties>
</project>

View File

@ -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<BufferedImage> okResponse(BufferedImage image) {
return new ResponseEntity<>(image, HttpStatus.OK);
}
//QRCodegen
@PostMapping(value = "/qrcodegen/qrcode", produces = MediaType.IMAGE_PNG_VALUE)
public ResponseEntity<BufferedImage> qrcodegenQRCode(@RequestBody String barcode) throws Exception {
return okResponse(QRCodegenGenerator.generateQrcode(barcode));
}
}

View File

@ -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;
}
}