En este tutorial aprenderemos a crear nuestra propia aplicación java para generar códigos QR.
¿Que es un Código QR?
«Un código QR (quick response code, «código de respuesta rápida») es un módulo útil para almacenar información en una matriz de puntos o un código de barras bidimensional creado en 1994 por la compañía japonesa Denso Wave, subsidiaria de Toyota.» [Santa Wikipedia]
Necesitamos
Tutorial
Esta aplicación permitirá codificar un texto introducido por teclado por el usuario, especificar las dimensiones del mismo, generar el código QR y tener la posibilidad de guardarlo en disco en formato de imagen.
Paso 1. Descarga e instala las librerías ZXing, si ya las tienes instaladas salta al paso 2
Paso 2. Crea un nuevo proyecto en Netbeans llamado «QRCreator» que tenga la siguiente estructura:
Ademas debemos añadir las librerías de ZXing al proyecto
Paso 3: La interfaz
Ayudándote de las herramientas gráficas de Netbeans crea una interfaz como la siguiente imagen:
No te olvides de cambiar los nombres de los objetos que están numerados.
Adicionalmente al JSpinner debes modificar su Model de la siguiente forma:
Paso 4. JDialog (QRDialog)
La interfaz del JDialog, solamente consiste solamente en un JLabel, ayúdate de un GridBagLayout para centrarlo en la ventana. Este JDialog nos permitirá mostrar el QR.
Paso 5. MyQRCreator.java
Esta clase contiene un método para crear codificar un texto y retornar una imagen en memoria.
import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Writer; import com.google.zxing.common.BitMatrix; import com.google.zxing.client.j2se.MatrixToImageWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.EnumMap; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class MyQRCreator { /** Constructor de clase */ public MyQRCreator(){} /** * Metodo que crea el QR * @param String data Texto a codificar * @param int size dimension (Alto,ancho) de la imagen a generar * @return BufferedImage */ public BufferedImage createQR(String data, int size) { BitMatrix matrix; Writer writer = new MultiFormatWriter(); try { EnumMap<EncodeHintType,String> hints = new EnumMap<EncodeHintType,String>(EncodeHintType.class); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); matrix = writer.encode(data, BarcodeFormat.QR_CODE, size, size, hints); ByteArrayOutputStream output = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(matrix, "PNG", output); byte[] data_array = output.toByteArray(); ByteArrayInputStream input = new ByteArrayInputStream(data_array); return ImageIO.read(input); } catch (com.google.zxing.WriterException ex) { System.err.println(ex.getMessage()); } catch (IOException ex) { System.err.println(ex.getMessage()); } return null; } }//end:MyQRCreator
Paso 5: Interfaz (Código)
Abrimos nuevamente nuestra clase Interfaz y en el evento del botón «btnCreate» añadimos el siguiente código
private void BtnCreateActionPerformed(java.awt.event.ActionEvent evt) { if(TxtContent.getText().length()>0) { MyQRCreator qr = new MyQRCreator(); QRDialog qRDialog = new QRDialog(this,true); qRDialog.setImageQR( qr.createQR(TxtContent.getText(), (Integer)SpDimension.getValue()) ); qRDialog.setVisible(true); } }
Paso 6: QRDialog
Para terminar la aplicación, abrimos la clase QRDialog en modo código.
Modificamos el constructor de clase de la siguiente manera:
BufferedImage bufferedImage; /** * Creates new form QRDialog */ public QRDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); setTitle("QR"); jLabel1.setText(""); jLabel1.setToolTipText("Click to save"); setLocationRelativeTo(null); setBackground(Color.white); }
Declaramos un nuevo método «setImageQR» que nos permitirá pasar una imagen al JDialog
public void setImageQR(BufferedImage bufferedImage) { if(bufferedImage!=null) { this.bufferedImage = bufferedImage; ImageIcon icon = new ImageIcon(bufferedImage); setSize(icon.getIconWidth()+20,icon.getIconHeight()+40); jLabel1.setIcon( icon ); } }
Para terminar agregamos el siguiente código al evento del único JLabel del QRDialog
private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Save QR"); FileFilter filter = new FileNameExtensionFilter("QR Image", "PNG"); fileChooser.addChoosableFileFilter(filter); int userSelection = fileChooser.showSaveDialog(this); if (userSelection == JFileChooser.APPROVE_OPTION) { File fileToSave = fileChooser.getSelectedFile(); if (!fileToSave.toString().endsWith(".png")) { fileToSave = new File(fileChooser.getSelectedFile()+".png"); } try { ImageIO.write(bufferedImage, "png", fileToSave); } catch (IOException ex) { System.err.println( ex.getMessage() ); } dispose(); } }
Este código nos permite abrir una ventana «Save as» para guardar en disco el QR generado en formato PNG
Descargar proyecto QRCreator
enjoy!!!
Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizand[...]
Para quienes hayan trabajado con JMF saben que es una librería de Java desarrollada por Sun Microsystems para facilitar[...]
Continuando con nuestro tutorial de «Mapas interactivos con HTML5» , esta es la sección que corresponde a los elementos[...]
Problema: Se extrae registros de una base de datos y se desea mostrar estos en un control JTable utilizando un DefaultTa[...]
«Mouse Responde…» simula ser un alma en pena que responde cualquier pregunta que le hagan, al estilo del juego de[...]
En este post aprenderemos lo que es la clonación de objetos en java o lo que es lo mismo, generación de nuevas instancia[...]