martes, 13 de agosto de 2013

Extraer la imagen de un JLabel y convertirla a Array de bytes y guardarla en una base de datos en java


Apeticion de un integrante del grupo I.R.P-LEGION, el cual tenia problemas para extraer el icono de un JLabel y convertirla a Array de bytes para luego guardarla en una base de datos ,hoy les enseño como realizar este procedimiento no muy aconsejable ya que la base de datos va a crecer considerablemente.

Primero necesito extraer la imagen o icono del JLabel para esto existe el métodogetIcon() que me retorna el icono o imagen del JLabel,luego necesito transformar este valor de retorno que es unIcon aImage para luego ser convertido en array de bytes por un método llamado
getTransFoto(Image image) este método me recibe el valor de tipo Image que acabamos de transformar para luego proceder a convertirlo a array de bytes por medio de unByteArrayOutputStream(me implementa un flujo de salida en donde se escriben los datos en una matriz de bytes).

private byte [] getTransFoto(Image image) {
ByteArrayOutputStream baos=null;
try {

baos = new ByteArrayOutputStream();
BufferedImage bufferedImage = createBufferedImageFrom(image);
ImageIO.write(bufferedImage, "jpeg", baos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toByteArray();
}


luego de ser convertido en array de bytes podemos realizar el proceso para almacenar la cadena de bytes dentro de una tabla cuyo campo debe de ser de tipoBlob .

Pero puedo convertir la cadena de bytes de nuevo a Imagen?
una vez que ya tengamos almacenada la cadena de bytes ,tambien podremos convertir esa cadena a Image, para ello necesito utilizar la claseToolkit y llamar a los metodosgetDefaultToolkit().createImage(bytes) este ultimo me recibe una cadena de bytes y crea unaImage este valor imagen lo retornamos a una variable de tipoImage,para eso creo una metodo que me reciba una sentencia SQL para realizar una consulta simple y extraer esa cadena de bytes que sera convertida aImage este método se llamagetFotografia(String sql,String campo).

public  Image getFotografia(String sql,String campo){ 
Image data=null;
try{
//se lee la cadena de bytes de la base de datos
ResultSet rs;
rs=ConexionBD.Consulta(sql);
while (rs.next()) {
byte[] b = rs.getBytes(campo);
data = ConvertirImagen(b);
}

// esta cadena de bytes sera convertida en una imagen

} catch (IOException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}catch(SQLException e){
System.out.println(e);
}
return data;
}


Ahora para redimensionar las imágenes al tamaño del JLabel también creo un Método que me recibe el valor de Image y un JLabel, congetScaledInstance() puedo redimensionar la imagen al tamaño del JLabel y retornar el valor a unImageIcon().


public ImageIcon DameFoto(Image image,JLabel label){

ImageIcon imageScalada = new ImageIcon(image.getScaledInstance(guardar_imagen.getWidth(),guardar_imagen.getHeight(),Image.SCALE_DEFAULT));

return imageScalada;
}

les dejo el codigo fuente completo mas la base de datos.


DESCARGAR
,

1 comentario:

  1. Men, ese código lo sirve en eclipse, pero yo estilizo IDE NetBeans, y me sale un error con esto (createBufferedImageFrom(image); ), por que no NetBeans no lo reconoce. Que puedo hacer en este caso, me ayudarias!

    ResponderEliminar