Friday 21 May 2021

Java: Generate Aztec 2D barcode

Below snippet generates Aztec 2D barcode.

Map<EncodeHintType, ErrorCorrectionLevel> hashMap = new HashMap<EncodeHintType, ErrorCorrectionLevel>();
hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

BitMatrix bitMatrix = new MultiFormatWriter().encode(new String(message.getBytes(encodingFormat)), BarcodeFormat.AZTEC, imageHeight, imageWidth);

String fileFormat = filePath.substring(filePath.lastIndexOf('.') + 1);
MatrixToImageWriter.writeToPath(bitMatrix, fileFormat, Paths.get(filePath));

 

Find the below working application.

 

Aztec2DBarcodeUtil.java

package com.sample.app.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class Aztec2DBarcodeUtil {

  public static boolean generateCode(String message, String filePath, Charset encodingFormat, int imageHeight,
      int imageWidth) {

    try {
      Map<EncodeHintType, ErrorCorrectionLevel> hashMap = new HashMap<EncodeHintType, ErrorCorrectionLevel>();
      hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

      BitMatrix bitMatrix = new MultiFormatWriter().encode(new String(message.getBytes(encodingFormat)),
          BarcodeFormat.AZTEC, imageHeight, imageWidth);

      String fileFormat = filePath.substring(filePath.lastIndexOf('.') + 1);
      MatrixToImageWriter.writeToPath(bitMatrix, fileFormat, Paths.get(filePath));
      return true;

    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }

  }

  public static String getInfoFromCode(String filePath, Charset encodingFormat)
      throws FileNotFoundException, IOException, NotFoundException {
    BinaryBitmap binaryBitmap = new BinaryBitmap(
        new HybridBinarizer(new BufferedImageLuminanceSource(ImageIO.read(new FileInputStream(filePath)))));
    Result result = new MultiFormatReader().decode(binaryBitmap);
    return result.getText();
  }
}

 

Aztec2DBarcodeGenerateDemo.java

package com.sample.app;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

import com.google.zxing.NotFoundException;
import com.sample.app.util.Aztec2DBarcodeUtil;

public class Aztec2DBarcodeGenerateDemo {
  public static void main(String args[]) throws FileNotFoundException, NotFoundException, IOException {
    String filePath = "/Users/Shared/secret.png";

    boolean isQRCodeGenerated = Aztec2DBarcodeUtil.generateCode("Transfer 1000 from account A to Account B",
        filePath, StandardCharsets.UTF_8, 250, 250);

    if (isQRCodeGenerated) {
      System.out.println("code generated successfully");
    } else {
      System.out.println("code generation failed");
    }

    String information = Aztec2DBarcodeUtil.getInfoFromCode(filePath, StandardCharsets.UTF_8);
    System.out.println(information);
    
  }
}

 

Output

code generated successfully

Transfer 1000 from account A to Account B

 

Generated secret.png file


 

 

 

 

 

 

Previous                                                    Next                                                    Home

No comments:

Post a Comment