lunes, 26 de febrero de 2018

Crear códigos QR con Java

Vamos hacer un pequeño sistema que nos permite generar códigos QR. Lo vamos a desarrollar con Java y NetBeans. Lo primero que vamos hacer es descargar la librería zxing-core-2.0.jar

Ahora vamos a crear un nuevo proyecto llamado QRTest para iniciar a escribir nuestro código. Cuando tenemos el proyecto listo lo que tenemos que hacer es agregar la librería zxing-core-2.0.jar para poder generar los códigos QR.

Ahora debemos importar las siguientes librerías en la clase donde vamos a generar nuestros códigos QR.


import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

Vamos a dar un vistazo al código.

public static void main(String[] args) {
        try {
            String content = "http://www.google.com";
            String filePath = "";
            String fileType = "png";
            int size = 125;
            UUID uuid = UUID.randomUUID();
            String randomUUIDString = uuid.toString();
            QRCodeWriter qrcode = new QRCodeWriter();
            BitMatrix matrix = qrcode.encode(content, BarcodeFormat.QR_CODE, size, size);
            File qrFile = new File(filePath + randomUUIDString + "." + fileType);
            int matrixWidth = matrix.getWidth();
            BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB);
            image.createGraphics();
            
            Graphics2D graphics = (Graphics2D) image.getGraphics();
            graphics.setColor(Color.WHITE);
            graphics.fillRect(0, 0, matrixWidth, matrixWidth);
            graphics.setColor(Color.BLACK);
            
            for (int b = 0; b < matrixWidth; b++) {
                for (int j = 0; j < matrixWidth; j++) {
                    if (matrix.get(b, j)) {
                        graphics.fillRect(b, j, 1, 1);
                    }
                }
            }
            ImageIO.write(image, fileType, qrFile);
        } catch (WriterException ex) {
            Logger.getLogger(QRTest.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(QRTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Primero vamos a tener la content la cual será el contenido de la imagen de nuestro código QR. Luego la variable filePath donde vamos a guardar la imagen, en este momento no le vamos a dar ninguna dirección para guardarla donde se ejecute nuestro sistema. La variable fileType es el formato de nuestra variable y en nuestro caso la vamos almacenar de tipo png. La que sigue es size con la que vamos a definir el tamaño de la imagen.

Ahora vamos a crear la variable uuid con la que vamos a crear el nombre de la imagen que será un texto generado para que cada una tenga un nombre distinto.

Debemos crear una variable de tipo BitMatrix que va a representar nuestra imagen en bits hasta que sea almacenada. El nombre de la variable es matrix. Esta variable requiere de un objeto que vamos a generar a partir de un objeto QRCodeWriter que nos va permitir crear nuestro código QR.

Ahora vamos a ver la variable image que es un BufferedImage donde vamos a contener nuestra imagen en memoria para que después la podamos escribir en disco duro.

Usando un objeto de tipo Graphics2D vamos a poder generar la imagen como tal para poder ser escrita en disco duro. Le damos un tamaño, un fondo, etc y ya la imagen esta lista para ser escrita.

Finalmente usando la clase ImageIO vamos a escribir la imagen. La imagen esta contenida en el objeto image, el tipo de imagen esta en la variable fileType y la dirección está en la variable qrFile.

 El resultado la imagen que deseamos generar con nuestro contenido. 



¿Quieres aprender java y C#?

Etiquetas:

2 comentarios:

A las 1 de julio de 2019, 17:42 , Anonymous Anónimo ha dicho...

Excelente post, cortita y al pie. Mejor imposible. Muchas gracias!!!

 
A las 25 de febrero de 2021, 10:07 , Blogger Unknown ha dicho...

Excelente post. Muchas gracias.

 

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio