jueves, 16 de octubre de 2014

Creación de codigo QR en Java

Tags

Creación de códigos QR.

En este post les mostrare como crear códigos QR, con una librería gratuita zxing-1.6, la documentación de esta librería está en internet dado que es “open source “ y esta trae dos métodos:
-crear código QR y 
-Leer el código QR, 
En este post solo veremos la creación de los códigos QR.

Nota: Lo que he realizado es solo adaptar o modificar los métodos proporcionados por la librería para crear una aplicación más interactiva.

Métodos para crear código QR:





    /**
     *
     * @param informacion es elcontenido que llevara el codigo QR, que se estrae de la caja de texto
     * @param ruta es la ruta donde vamos a guardar el archivo
     * @throws WriterException
     * @throws IOException
     */
    public void crearCodigoQR(String informacion, String ruta) throws WriterException, IOException {
        FileOutputStream qrCode = null;
        try {
            BitMatrix bm;
            Writer writer = new QRCodeWriter();
            bm = writer.encode(informacion, BarcodeFormat.QR_CODE, ancho, alto);
            BufferedImage image = new BufferedImage(ancho, alto, BufferedImage.TYPE_INT_RGB);
            for (int y = 0; y < ancho; y++) {
                for (int x = 0; x < alto; x++) {
                    int grayValue = (bm.get(x, y) ? 1 : 0) & 0xff;
                    image.setRGB(x, y, (grayValue == 0 ? 0 : 0xFFFFFF));
                }
            }
            image = invertirColores(image);
            qrCode = new FileOutputStream(rutaQR + "." + FORMATO_IMAGEN);
            ImageIO.write(image, FORMATO_IMAGEN, qrCode);
            qrCode.close();
        // ESTO ES PARA ABRIR EL CODIGO QR, CON EL VISOR DE IMAGENS despues de averce creado :D
        // Tiene como parametro la ruta del archivo QR
        //Desktop d = Desktop.getDesktop();
        //d.open(new File("Aqui va la ruta del QR"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(CodigoQRZinx.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                qrCode.close();
            } catch (IOException ex) {
                Logger.getLogger(CodigoQRZinx.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    /**
     * Este metodo se utiliza el el metodo crearCodigoQR("","")
     * Mas informacion de esta libreria puede buscarla en internet o en el link que esta en este post
     * @param imagen
     * @return
     */
    private static BufferedImage invertirColores(BufferedImage imagen) {
        for (int x = 0; x < ancho; x++) {
            for (int y = 0; y < alto; y++) {
                int rgb = imagen.getRGB(x, y);
                if (rgb == -16777216) {
                    imagen.setRGB(x, y, -1);
                } else {
                    imagen.setRGB(x, y, -16777216);
                }
            }
        }
        return imagen;
    }


Nota: Las librerías necesarias están en el proyecto