Merge pull request #16455 from Michaelin007/qrcodegen
Generate QR Code in Java using QR-Code-Generator
This commit is contained in:
commit
db34c4b3c3
|
@ -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>
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue