Java Codigos de Barra con ZXing

El código de barra QR Code (Quick Response Code) es capaz de almacenar muchos más datos en menos tamaño en comparación con otros códigos de barra.

Veamos con un breve ejemplo utilizando ZXing como crear códigos QR. Este ejemplo también te servirá para cualquier otro tipo de código soportado.

Importar dependencia ZXing con maven

    <dependencies>
       <dependency>
           <groupId>com.google.zxing</groupId>
           <artifactId>core</artifactId>
           <version>3.3.0</version>
           <type>pom</type>
       </dependency>
    
       <dependency>
           <groupId>com.google.zxing</groupId>
           <artifactId>javase</artifactId>
           <version>3.3.0</version>
       </dependency>
    
    </dependencies>

Como escribir código QR Code con ZXing

Debes utilizar la clase BitMatrix que recibirá el texto, formato y tamaño de la imagen. Luego te valdrás de MatrixToImageWriter para escribir este BitMatrix en un OutputStream.

private static void writeQR(String text, String pathname) throws WriterException, IOException {

   int width = 600;
   int height = 400;

   String imageFormat = "png"; // "jpeg" "gif" "tiff"

   BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, width, height);
   FileOutputStream outputStream = new FileOutputStream(new File(pathname));
   MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, outputStream);

}

Como leer código QR Code con ZXing

Aquí debes utilizar BinaryBitmap y MultiFormatReader, esta última una clase que intentará decodificar el qr code del bitmap (nuestra imagen qr) y te devolverá el string resultante.

private static String readQR(String pathname) throws FormatException, ChecksumException, NotFoundException, IOException {

   InputStream qrInputStream = new FileInputStream(pathname);
   BufferedImage qrBufferedImage = ImageIO.read(qrInputStream);

   LuminanceSource source = new BufferedImageLuminanceSource(qrBufferedImage);
   BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
   Reader reader = new MultiFormatReader();
   Result stringBarCode = reader.decode(bitmap);

   return stringBarCode.getText();
}

Cómo leer y escribir código QR Code

El código completo te queda de esta manera

public class QRCodeExample {

   public static void main(String[] arg) {

       String pathname = "qrcode_example.png";
       String textToQr = "La imaginación es más importante que el conocimiento";

       try {
           writeQR(textToQr, pathname);
           String text = readQR(pathname);
           System.out.print(text);

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

   private static void writeQR(String text, String pathname) throws WriterException, IOException {

       int width = 600;
       int height = 400;

       String imageFormat = "png"; // "jpeg" "gif" "tiff"

       BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, width, height);
       FileOutputStream outputStream = new FileOutputStream(new File(pathname));
       MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, outputStream);

   }

   private static String readQR(String pathname) throws FormatException, ChecksumException, NotFoundException, IOException {

       InputStream qrInputStream = new FileInputStream(pathname);
       BufferedImage qrBufferedImage = ImageIO.read(qrInputStream);

       LuminanceSource source = new BufferedImageLuminanceSource(qrBufferedImage);
       BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
       Reader reader = new MultiFormatReader();
       Result stringBarCode = reader.decode(bitmap);

       return stringBarCode.getText();
   }

}

Otros códigos de barra soportados

Viendo el enum BarcodeFormat vemos estos códigos de barra soportados por ZXing

public enum BarcodeFormat {
    AZTEC, CODABAR, CODE_39, CODE_93, CODE_128, DATA_MATRIX, EAN_8, EAN_13, ITF, MAXICODE, PDF_417, QR_CODE, RSS_14, RSS_EXPANDED, UPC_A, UPC_E, UPC_EAN_EXTENSION;
}

Referencias:

[https://github.com/zxing/zxing]1 [https://zxing.github.io/zxing/project-info.html]2

Descarga este código completo

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)

Ver también