Como puedo guardar la imagen de un lector de huella en Mysql? – java

Pregunta:


Me gustaría guardar la imagen , (NO el template) de una imagen de lector de huella el código para convertirla según el manual de DigitalPersona es este:

public Image CrearImagenHuella(DPFPSample sample) 
{
 return 
DPFPGlobal.getSampleConversionFactory().createImage(sample);
}

Y el codigo que uso para guardar en Mysql es este:

try 
{   
     Connection c=cn.conectar();
     PreparedStatement guardarStmt = c.prepareStatement("INSERT INTO somhue(hnombre,identificacion, huehuella) values(?,?,?)");
     guardarStmt.setString(1,nombre);
     guardarStmt.setInt(2, Id);
     guardarStmt.setBinaryStream(3,in);
     //Ejecuta la sentencia
     guardarStmt.execute();
     guardarStmt.close();
     JOptionPane.showMessageDialog(null,"Huella Guardada Correctamente");
     cn.desconectar();
     BtnGuardar.setEnabled(false);

}
 catch (SQLException ex)
{
     //Si ocurre un error lo indica en la consola
     System.err.println("Error al guardar los datos de la huella.");
     JOptionPane.showMessageDialog(null, "La persona ya se encuentra registrada por favor verificar los datos e intentar de nuevo ","VERIFICACION DE DATOS", JOptionPane.ERROR_MESSAGE);

}
finally
{
cn.desconectar();

}

Sin embargo no he podido usar esa variable “sample” dentro del código para guardar en mysql, alguien que pueda indicarme como poder almacenarla?

Preguntado por: Jorge Herrera

Comunidad

setBinaryStream requiere en el segundo parámetro un objeto de tipo InputStream

Pero lo que tienes es un objeto de tipo Image, como el código no es completo supongo que java.awt.Image

Si el objeto del que dispones fuese de tipo BufferedImage sería sencillo convertirlo a un stream de bytes :

Image imagen = CrearImagenHuella(sample);
BufferedImage buffImg = convertirABufferedImage( imagen );
ByteArrayOutputStream streamWrite = new ByteArrayOutputStream();
ImageIO.write(image,"png", streamWrite); // Puede que quieras otro formato distinto
InputStream in = new ByteArrayInputStream(streamWrite.toByteArray());

/// ... Y ya puedes usar .....

guardarStmt.setBinaryStream(3,in);

Ya solo falta convertir la imagen a Buffered image, lo cual he sacado de esta respuesta en inglés de Sri Harsha Chilakapati

/**
 * Convierte una imagen en BufferedImage
 *
 * @param img La Image a convertir
 * @return El BufferedImage convertido
 */
public static BufferedImage convertirABufferedImage(Image img)
{
    if (img instanceof BufferedImage)
    {
        return (BufferedImage) img;
    }

    // Crear imagen buffered con transparencia
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

    // Dibujar la imagen en la buffered imagen
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();

    // Devolver la buffered image
    return bimage;
}

Gracias a la respuesta de Jose Antonio Dura Olmos, pude resolverlo. Publico la solución final en caso de que a algún usuario le sirva.

En este caso por medio de BufferedImage hice lo siguiente:

  1. Declare una variable llamada Ejemplo

    private DPFPCapture Lector = DPFPGlobal.getCaptureFactory().createCapture();
    
    private DPFPEnrollment Reclutador = DPFPGlobal.getEnrollmentFactory().createEnrollment();
    
    private DPFPVerification Verificador = DPFPGlobal.getVerificationFactory().createVerification();
    
    private DPFPTemplate template;
    
    public BufferedImage Ejemplo;
    
  2. Luego a esta variable le asigne image, que es la que me dibuja el lector.

    Image image=CrearImagenHuella(sample);
    DibujarHuella(image);
    Ejemplo =  (BufferedImage) image;
    
  3. Dentro del método Guardar tengo el siguiente código:

    public void guardarHuella(DPFPSample sample)
        {
        try
         {
    
          //Obtiene los datos del template de la huella actual
    
          String formato = "JPEG";
    
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          if(Ejemplo !=null)
    
           ImageIO.write((RenderedImage) Ejemplo, formato, out);
            DibujarHuella1( Ejemplo);
    
          InputStream in = new ByteArrayInputStream(out.toByteArray());
          ByteArrayInputStream datosHuella = new ByteArrayInputStream(template.serialize());
          Integer tamañoHuella=template.serialize().length;
    
          //Pregunta el nombre de la persona a la cual corresponde dicha huella
          String nombre;
          String Identificacion;
          nombre = JOptionPane.showInputDialog("Nombre:");
          Identificacion = JOptionPane.showInputDialog(null,"NUMERO DE IDENTIFICACION:"+"n" +"NO colocar puntos ni guiones","DATOS PERSONALES",JOptionPane.INFORMATION_MESSAGE);
          //se creó la variable tipo entero llamada Id
          int Id;
          //Convierte la variable Identificacion la cual esta de tipo String a entero por medio de la variable Id
          Id =Integer.parseInt(Identificacion);
            {
              try
            {                    
                  //Establece los valores para la sentencia SQL
                  Connection c=cn.conectar();
                  PreparedStatement guardarStmt = c.prepareStatement("INSERT INTO somhue(hnombre,identificacion, huehuella) values(?,?,?)");
                  guardarStmt.setString(1,nombre);
                  guardarStmt.setInt(2, Id);
                  guardarStmt.setBinaryStream(3,in);
                  //Ejecuta la sentencia
                  guardarStmt.execute();
                  guardarStmt.close();
                  JOptionPane.showMessageDialog(null,"Huella Guardada Correctamente");
                  cn.desconectar();
                  BtnGuardar.setEnabled(false);
    
                  }
               catch (SQLException ex) 
                 {
                  //Si ocurre un error lo indica en la consola
                  System.err.println("Error al guardar los datos de la huella.");
                  JOptionPane.showMessageDialog(null, "La persona ya se encuentra registrada por favor verificar los datos e intentar de nuevo ","VERIFICACION DE DATOS", JOptionPane.ERROR_MESSAGE);     
              }
              finally
              {
                  cn.desconectar();   
              }      
          }
      } catch (IOException ex) {
          Logger.getLogger(Huella.class.getName()).log(Level.SEVERE, null, ex);
           }
       }
    

Y al final cuando coloque la visualización en el label, ya pude ver la imagen de la huella y almacenarla en la base de datos. Esta pesa 60KB lo cual no es mucho.

Fuente

Related Posts:

Several c-lick language editor extensions for laravel-admin based on code-mirror
...
PHP Java bridge server tools
...
Soluble PHP Java bridge integration
...
Create Reports in PHP with JasperReports
...
YUI Compressor is an open source tool that supports the compression of both JavaScript and CSS files. The JavaScript compression removes comments and white-spaces as well as obfuscates local variables using the smallest possible variable name. CSS compression is done using a regular-expression-based…
...
Tomcat no encuentra los recursos – java angularjs http
Pregunta: Bueno tengo una aplicación con AngularJS que hace peticiones al API de gitHub como un ejemplo para aprender a usar AngularJS, pero el problema ...
Crear cuenta regresiva N segundos mientras se visualiza una Activity en Android – java android
Pregunta: Quiero implementar una cuenta regresiva de N segundos, que se inicie cuando la Activity se muestre, se pare el contador cuando el usuario decide ...
¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi app? – java woocommerce
Pregunta: ¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi programa? Supongamos que quiero hacer una aplicación como la de ebay, ...
Problema con consulta JPQL + JPA + JSF + EJB – java jsf jpa
Pregunta: @Override public Usuario iniciarSesion(Usuario us){ Usuario usuario = null; String consulta; try { ...
No encuentra el audio dentro de src – java
Pregunta: Tengo una carpeta "audios" dentro de "src", para cuando construya el proyecto pueda reproducir los audios. Intento abrir el audio pero me salta "java.lang.NullPointerException" ...
¿Como saber con Apache POI y java si una columna en excel esta oculta? – java apache-poi
Pregunta: Hola estoy importando archivos excel con extensión xls y xlsx pero mi duda es como poder detectar si la columna de una celda esta ...
Spinner y EditText – java android
Pregunta: Tengo este código para cargar un spinner con datos de una base de datos: private class Getfrutas extends AsyncTask<Void, Void, Void> { ...
¿Cómo enviar datos de una pagina JSP a un Servlet sin un form? – java jsp java-ee
Pregunta: Tengo un problema. No logro recibir un valor por GET en el Servlet, no se por qué. Aquí el código JSP: <html> ...
Ayuda con un Calendario en Linea de Codigo – java
Pregunta: Pues se supone que mi código debería imprimir en algunos meses 31 días según una de mis condiciones pero no lo hace de hecho ...
¿ Por qué se me detiene la aplicación al usar este pequeño código? – java android bottombar
Pregunta: Tengo un bottomBar donde tengo 5 opciones, la última es la del mapa de google API. Mi problema es que al hacer click en ...
Tags:

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *