elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Grabar Imagen a SQL en JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Grabar Imagen a SQL en JAVA  (Leído 6,898 veces)
_rez3t45_

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Grabar Imagen a SQL en JAVA
« en: 16 Diciembre 2011, 22:38 pm »

Saludos a Todos .. hace mucho que no entraba  ;D

Estoy haciendo una Aplicacion de escritorio y consiste en :
en mi formulario tengo conectada una webcam (quiero hacer un control de entradas)
y cada vez que ingrese un usuario se logee y aparezca su foto y tambien que tome una instantanea con la webcam ..

Mi problema es que obtengo la imagen desde la webcam ... pero no e podido guardarla en el SQL ... me quedo asta aqui

Código:

ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write((RenderedImage) img, "JPEG", out);
InputStream in = new ByteArrayInputStream(out.toByteArray());
                       
String cad_sql = "{call Tsp_graba_control(?,?,?)  }" ; 

da.setInt(1, 1);
da.setString(2, "IN");

// eh Aqui mi problema al enviar la imagen
da.setByte(3,in);

int rpt = da.executeUpdate();


Me compila y no manda error ... pero no graba ... o de esta forma no se guarda la imagen ... en .NET lo que hacia era pasarlo a bytes pero en java no se !!

 :-(


En línea

<-- ZmPlmnTe Punk -->
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Grabar Imagen a SQL en JAVA
« Respuesta #1 en: 16 Diciembre 2011, 22:46 pm »

tenes que hacer lo mismo que en .NET, los metodos son iguales hasta para VB6 incluso es lo mismo, pasas la imagen a bytes y guardas eso en la base de datos, para recuperar al reves recuperas los byes y los convertis a imagen.

para SQLite usa campo tipo BLOB , para MySQL tambien, para SQL Server podes usar el campo tipo image (pero esta en desuso) o sino varbinary(max).

saludos.


En línea

_rez3t45_

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Grabar Imagen a SQL en JAVA
« Respuesta #2 en: 17 Diciembre 2011, 16:44 pm »

Gracias Doc .. pero la duda que tengo es que en mi caso no obtengo una imagen desde la computadora . . que seria con un dialogo como JFileChooser .. 

Yo obtengo mi Imagen desde una webcam ,,
La imagen la tengo en dato Image ;

Código:
        Image img=null;
        FrameGrabbingControl fgc = (FrameGrabbingControl)
        //Player es la variable de JMF
        player.getControl("javax.media.control.FrameGrabbingControl");
        Buffer buf = fgc.grabFrame();
        // creamos la imagen awt
        BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
        img = btoi.createImage(buf);

bueno mi dida seria como convertir la variable img (Image) a Byte[]  para poder guardarlo en la BD ... estado buscando y la mayoria de ejemplos de internet estan con imagenes que optienen de la pc .. no de el componente player

En línea

<-- ZmPlmnTe Punk -->
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Grabar Imagen a SQL en JAVA
« Respuesta #3 en: 18 Diciembre 2011, 06:21 am »

te entiendo, yo programo en java pero para Android, o sea los controles son totalmente diferente a los de windows, pero este codigo lo saque de internet, te puede ayudar.

Código
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5.  
  6. /*
  7.  * Acceder2Frames.java
  8.  *
  9.  * Created on 30/06/2010, 10:15:01 PM
  10.  */
  11.  
  12. package com.blogspot.rolandopalermo.sockets;
  13.  
  14. import java.awt.BorderLayout;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.awt.image.BufferedImage;
  18. import java.io.ByteArrayOutputStream;
  19. import java.io.EOFException;
  20. import java.io.IOException;
  21. import java.io.ObjectOutputStream;
  22. import java.net.InetAddress;
  23. import java.net.Socket;
  24. import javax.imageio.ImageIO;
  25. import javax.media.Buffer;
  26. import javax.media.CaptureDeviceInfo;
  27. import javax.media.CaptureDeviceManager;
  28. import javax.media.Manager;
  29. import javax.media.MediaLocator;
  30. import javax.media.Player;
  31. import javax.media.Processor;
  32. import javax.media.control.FrameGrabbingControl;
  33. import javax.media.format.VideoFormat;
  34. import javax.media.util.BufferToImage;
  35. import javax.swing.Timer;
  36.  
  37. /**
  38.  *
  39.  * @author Rolando
  40.  */
  41. public class Acceder2Frames extends javax.swing.JFrame {
  42.  
  43.    //Atributos necesarios para acceder a una cámara web
  44.    private static Player player = null;
  45.    private MediaLocator localizador = null;
  46.    private Processor p;
  47.    private CaptureDeviceInfo dispositivo = null;
  48.    private static String source = "vfw:Microsoft WDM Image Capture (Win32):0";
  49.    private Timer timer;
  50.    private Buffer buffer;
  51.    private BufferToImage buffer_image = null;
  52.  
  53.    /** Creates new form Acceder2Frames */
  54.    public Acceder2Frames(String host) {
  55.        initComponents();
  56.        servidorChat = host;
  57.        dispositivo = CaptureDeviceManager.getDevice(source);
  58.        localizador = dispositivo.getLocator();
  59.        timer = new Timer (1, new ActionListener () {   //Cada 1 milisegundo capturará el frame de video
  60.            public void actionPerformed(ActionEvent e) {
  61.                FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
  62.                buffer = fgc.grabFrame();
  63.                // Convert it to an image
  64.                buffer_image = new BufferToImage((VideoFormat)buffer.getFormat());
  65.                BufferedImage bufferedImage = (BufferedImage)buffer_image.createImage(buffer);
  66.                ByteArrayOutputStream salidaImagen = new ByteArrayOutputStream();
  67.                try {
  68.                    ImageIO.write(bufferedImage, "jpg", salidaImagen);
  69.                    byte[] bytesImagen = salidaImagen.toByteArray();
  70.                    salida.writeObject( bytesImagen );
  71.                    salida.flush();
  72.                //                panelCaptura.setImage(img);
  73.                } catch ( Exception excepcionEOF ) {
  74.                    System.err.println( "El cliente termino la conexión" );
  75.                }
  76.            }
  77.        });
  78.        setLocationRelativeTo(null);
  79.        setVisible(true);
  80.    }
  81.  
  82.    private void iniciarCaptura() {
  83.        try {
  84.            player = Manager.createRealizedPlayer(localizador);
  85.            player.start();
  86.            if (player.getVisualComponent() != null) {
  87.                panelVideo.add(player.getVisualComponent(), BorderLayout.CENTER);
  88.                panelVideo.updateUI();
  89.            }
  90.        } catch (Exception e) {
  91.            System.err.println(e.toString());
  92.        }
  93.    }
  94.  
  95.    public void acceso2Frames() {
  96.        timer.start();
  97.    }
  98.  
  99.    /** This method is called from within the constructor to
  100.      * initialize the form.
  101.      * WARNING: Do NOT modify this code. The content of this method is
  102.      * always regenerated by the Form Editor.
  103.      */
  104.    @SuppressWarnings("unchecked")
  105.    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  106.    private void initComponents() {
  107.  
  108.        panelVideo = new javax.swing.JPanel();
  109.        panelOpciones = new javax.swing.JPanel();
  110.        botonSalir = new javax.swing.JButton();
  111.  
  112.        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  113.        setTitle("Captura de Video - Transmisor de video");
  114.  
  115.        panelVideo.setLayout(new java.awt.BorderLayout());
  116.  
  117.        panelOpciones.setBackground(new java.awt.Color(204, 204, 204));
  118.  
  119.        botonSalir.setText("Cerrar");
  120.        botonSalir.setOpaque(false);
  121.        botonSalir.addActionListener(new java.awt.event.ActionListener() {
  122.            public void actionPerformed(java.awt.event.ActionEvent evt) {
  123.                botonSalirActionPerformed(evt);
  124.            }
  125.        });
  126.        panelOpciones.add(botonSalir);
  127.  
  128.        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  129.        getContentPane().setLayout(layout);
  130.        layout.setHorizontalGroup(
  131.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  132.            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  133.                .addContainerGap()
  134.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  135.                    .addComponent(panelVideo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE)
  136.                    .addComponent(panelOpciones, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE))
  137.                .addContainerGap())
  138.        );
  139.        layout.setVerticalGroup(
  140.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  141.            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  142.                .addContainerGap()
  143.                .addComponent(panelVideo, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
  144.                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  145.                .addComponent(panelOpciones, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
  146.                .addContainerGap())
  147.        );
  148.  
  149.        pack();
  150.    }// </editor-fold>//GEN-END:initComponents
  151.  
  152.    private void botonSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSalirActionPerformed
  153.        // TODO add your handling code here:
  154.        if(player != null) {
  155.            player.close();
  156.            player.deallocate();
  157.        }
  158.        timer.stop();
  159.        cerrarConexion();
  160.        System.exit(0);
  161.    }//GEN-LAST:event_botonSalirActionPerformed
  162.  
  163.    private void ejecutarCliente() {
  164.        try {
  165.            conectarAServidor(); // Paso 1: crear un socket para realizar la conexión
  166.            salida = new ObjectOutputStream( cliente.getOutputStream() );
  167.            salida.flush(); // vacíar búfer de salida para enviar información de encabezado
  168.            acceso2Frames();
  169.        } catch ( EOFException excepcionEOF ) {
  170.            System.err.println( "El cliente termino la conexión" );
  171.        } catch ( IOException excepcionES ) {
  172.            excepcionES.printStackTrace();
  173.        }
  174.    } // fin del método ejecutarCliente
  175.  
  176.    // conectarse al servidor
  177.    private void conectarAServidor() throws IOException {
  178.        cliente = new Socket( InetAddress.getByName( servidorChat ), 12345 );
  179.    }
  180.  
  181.    private void cerrarConexion() {
  182.        System.out.println( "\nCerrando conexión" );
  183.        try {
  184.            salida.close();
  185.            cliente.close();
  186.        } catch( IOException excepcionES ) {
  187.            excepcionES.printStackTrace();
  188.        }
  189.    }
  190.  
  191.    /**
  192.     * @param args the command line arguments
  193.     */
  194.    public static void main(String args[]) {
  195.        setDefaultLookAndFeelDecorated(true);
  196.        Acceder2Frames ventana = new Acceder2Frames("127.0.0.1");
  197.        ventana.iniciarCaptura();
  198.        ventana.ejecutarCliente();
  199.    }
  200.  
  201.    private ObjectOutputStream salida;
  202.    private String servidorChat;
  203.    private Socket cliente;
  204.    // Variables declaration - do not modify//GEN-BEGIN:variables
  205.    private javax.swing.JButton botonSalir;
  206.    private javax.swing.JPanel panelOpciones;
  207.    private javax.swing.JPanel panelVideo;
  208.    // End of variables declaration//GEN-END:variables
  209.  
  210. }
  211.  

fijate ahi tenes como lo convierte a Bytes, al principio del codigo cuando usa "javax.media.control.FrameGrabbingControl" pero no usa el Image comun usa otro objeto.

saludos.
« Última modificación: 18 Diciembre 2011, 06:24 am por seba123neo » En línea

_rez3t45_

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Grabar Imagen a SQL en JAVA
« Respuesta #4 en: 20 Diciembre 2011, 14:17 pm »

exacto .... hasta aqui logre convertir a bytes[]  solo que al mandarlo a la bd el campo FOTO(img) me dice :
"comilla no cerrada despues de #?.A% "   algo azi .. azi que lo envie como cadena .lo guardo pero al verificar si estaban las img no eran ... salian todo plomas ,,

por lo pronto y la  urgencia que tengo , lo e echo a la fuerza .guardando la img a la pc una carpeta temporal.y de hay la convierto a byte para pasarla a la BD ,,, y asi si logre guardarlo.... pero aun me quedo con la duda pero ya la encontrare en el camino ... Gracias Amigo seba123neo
En línea

<-- ZmPlmnTe Punk -->
Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Grabar Imagen a SQL en JAVA
« Respuesta #5 en: 20 Diciembre 2011, 14:45 pm »

puedes pasarla a bytes de la siguiente forma:

Código
  1. BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);  
  2. Graphics2D graphics2d = bufferedImage.createGraphics();  
  3. graphics2d.drawImage(image, 0, 0, null);  
  4. ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
  5. try {
  6. ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
  7. byte bytes[]=byteArrayOutputStream.toByteArray();
  8. } catch (FileNotFoundException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. } catch (IOException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
k es grabar una imagen? « 1 2 »
Software
Z3NTR4L 11 5,254 Último mensaje 6 Junio 2003, 06:19 am
por Songoku
Grabar una imagen de un dvd de 5.9 gb
Software
eugeniodr 0 2,553 Último mensaje 17 Marzo 2006, 19:41 pm
por eugeniodr
Grabar una imagen de 8.5 gb.
Software
mohoja 2 4,272 Último mensaje 13 Julio 2006, 20:23 pm
por mohoja
Grabar imagen mds
Software
david_crs 6 6,249 Último mensaje 11 Enero 2007, 05:03 am
por .hack//
Grabar una imagen ISO
Software
CarSoft 2 3,190 Último mensaje 26 Marzo 2007, 21:49 pm
por ‭lipman
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines