In this article, we will look at how to use the Zxing QR code generation library and JFreeSVG library to create a QR Code SVG image in Java.
QR Code Generation
The below code creates a
object representing QR Code using Zxing library:java.awt.image.BufferedImage
public static BufferedImage getQRCode(String targetUrl, int width,
int height) {
try {
Hashtable<EncodeHintType, Object> hintMap = new Hashtable<>();
hintMap.put(EncodeHintType.ERROR_CORRECTION,
ErrorCorrectionLevel.L);
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix byteMatrix = qrCodeWriter.encode(targetUrl,
BarcodeFormat.QR_CODE, width, height, hintMap);
int CrunchifyWidth = byteMatrix.getWidth();
BufferedImage image = new BufferedImage(CrunchifyWidth,
CrunchifyWidth, BufferedImage.TYPE_INT_RGB);
image.createGraphics();
Graphics2D graphics = (Graphics2D) image.getGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, CrunchifyWidth, CrunchifyWidth);
graphics.setColor(Color.BLACK);
for (int i = 0; i < CrunchifyWidth; i++) {
for (int j = 0; j < CrunchifyWidth; j++) {
if (byteMatrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1);
}
}
}
return image;
} catch (WriterException e) {
e.printStackTrace();
throw new RuntimeException("Error getting QR Code");
}
}
Conversion to SVG
The below code snippet converts the
object into SVG using JFreeSVG:java.awt.image.BufferedImage
public static String getQRCodeSvg(String targetUrl, int width,
int height, boolean withViewBox){
SVGGraphics2D g2 = new SVGGraphics2D(width, height);
BufferedImage qrCodeImage = getQRCode(targetUrl, width, height);
g2.drawImage(qrCodeImage, 0,0, width, height, null);
ViewBox viewBox = null;
if ( withViewBox ){
viewBox = new ViewBox(0,0,width,height);
}
return g2.getSVGElement(null, true, viewBox, null, null);
}
The complete code can be found here.
Our present level of A.I. can not truly convert any PNG into SVG format.