Inserindo foto da cam no banco

13 respostas
Dani_Gomes

Tenho um panel na minha aplicação que recebe a imagem da cam e inseri no cadastro do aluno uma foto dele.
Andei lendo como eu faria para inserir no banco e cheguei a conclusão que eu deveria transformar esta foto em um bufferedimage para depois transformar em um array de bytes.
E meu código ficou assim:

public static BufferedImage ImageToBuffered(Image im) {          
        BufferedImage bi = new BufferedImage(im.getWidth(null), im.getHeight(null), BufferedImage.TYPE_INT_RGB);  
        Graphics bg = bi.getGraphics();  
        bg.drawImage(im, 0, 0, null);  
        bg.dispose();          
        return bi;          
    }  
/*
 * Transforma um BufferedImage pra um array de bytes  
 */
    public static byte[] bufferToBytes( BufferedImage buffer) throws Exception {            
        byte[] bytes = null;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {              
            if ( buffer != null)  
                ImageIO.write(buffer,"jpg", baos);              
        } catch (IOException e) {              
            baos = null;  
            throw e;              
        } finally {          
            if ( baos != null )  
                bytes =  baos.toByteArray();          
        }
        return bytes;  
          
    }

Então eu envio para o banco.
Quando eu tento abrir esta foto, não consigo abrí-la, pois diz que o arquivo esta corrompido ou danificado ou ele é muito grande.
O código que estou usando para criar um novo arquivo está assim:

private void geraFoto(byte[] foto) throws IOException{  
        byte[] imgBytes = foto;  
        try{  
            FileOutputStream fos = new FileOutputStream("c:\\teste\\Teste.jpg");  
             fos.write(imgBytes);  
             FileDescriptor fd = fos.getFD();  
             fos.flush();  
             fd.sync();  
             fos.close();   
        }  
        catch(Exception e){  
            String erro = e.toString();  
        }   
    }

Se alguém puder me ajudar com este problema, pois já procurei em vários sites e não estou conseguindo resolver.

13 Respostas

R

olha quando eu salvava imagens, apenas as salvava, e guardava o nome delas, e o diretório onde estão. na imagem de fato nem mexia. fiz um fotolog em php que funcionou muito bem.
não sei se isto ajuda um pouco.

Dani_Gomes

Caro, raghy.
Na verdade eu já estou inserindo a imagem na foto.
O único fato é que neste processo, esta acontecendo um erro ou está faltando algo, que no retorno da imagem ela não é construída perfeitamente no arquivo.
Obrigado pela ajuda.
Mas ainda fico com a dúvida do que está faltando.

FernandoFranzini

Segue uma dica fora da sua pergunta…veja se interessa - http://fernandofranzini.wordpress.com/2011/10/03/gerenciando-arquivos-em-aplicativos-web/
T+

Dani_Gomes

Obrigado pela ajuda FernandoFranzini.
Mas ainda assim eu vou continuar tentando.
Não sei se você poderia me ajudar, mas me parece que no retorno da minha imagem, ele cria um arquivo normalmente, porém não está desenhando dentro deste arquivo.
Acredito que seja uma linha de comando e tudo ficará perfeito.
Mas, se você não puder me ajudar, agradeço a lembrança.

R

bem de fato posso não estar entendendo bem.
mas se vc consegue capturar a imagem da camera,
é só salvar ela em uma pasta fixa, e daí salvar o caminho da mesma,
e em cada aluno, vc salva somente o caminho da imagem que salvou,
sem estas transformacoes todas.

a foto é criada jpg mesmo?

por fim, estou dizendo quase a mesma coisa, mas é que não vejo o porque destas transformacoes da imagem. salva ela e o caminho vinculado a cada aluno, o nome da imagem, pode ser o mesmo do aluno, por exemplo. aí busca a imagem na pasta, através do nome do aluno . poste o resultado ou se solucionou se puder. valeu.

R

e vc quer inserir uma imagem em cada foto? isto não ficou bem claro, tb.

pelo ‘desenhando dentro do arquivo’.

mas de fato só com o projeto todo na mão para ajudar.

Dani_Gomes

raghy.
Assim, a cam é projetada dentro de um panel, então quando eu clico no botão cadastrar a imagem que está no panel será enviada para o banco.
Como no banco não aceita uma foto propriamente dita, o programa tem que transformar a imagem em um array de bytes, para então inserir este array no banco.
Na hora de dar o select no banco, ele retornará um array. Este deverá ser transformado numa imagem para inserir num jlabel.
O que eu estou fazendo, estou buscando do banco e criando um arquivo de uma foto. Para então inserir este arquivo no jlabel.
Entendeu agora?
O arquivo que eu crio é a imagem(foto) que eu quero que apareça no jlabel.
Este arquivo é único dentro do meu projeto, cada vez que eu clico no botão consultar, ele sobreescreve este arquivo.
Abraços

R

bem duas coisas… realmente, transformar imagem da cam em imagem é bem bacana. este está sendo um problema? vc está transformando a imagem em bytes é isto?

pelo que entende vc quer transformar uma imagem em um array… eu particularmente nunca vi disto.

se vc sobrescreve o arquivo a toda hora, onde ficam armazenadas as fotos por exemplo? este sobrescrever no caso é só mostrar a foto, as fotos tem que ficarem todas guardadas, se sobrescrever vc perde as fotos toda hora, qual vantagem de cadastrar, por exemplo?

continuo falando o que eu disse.

vc deve salvar a imagem
que tem no arquivo das fotos…

(se realmente já consegue pegar como foto sem problemas (senao talvez seje outra história)

e no banco vc só coloca o caminho ou seja o diretório em que a foto está no arquivo…

coisa com foto, sempre funciona assim…
e aí na consulta, chama o endereco…

nunca vi nada de transformar fotos em bytes, para depois reproduzi-las… (como um desenho? )

de fato não entendo…

de fato ou vc não entendeu o que eu disse, ou eu não entendo esta sua forma de fazer as coisas, que é no mínimo diferente…

espero ver o que vc está fazendo…

se quiser me mandar o projeto todo pelo email por exemplo. ou as classes que fazem funcionar esta parte posso olhar com mais calma… (e tentar ajudar) [email removido]

valeu. aguardo.

relendo fiquei curioso em como vc pode transformar uma imagem em um array de bytes… tem algum exemplo? ponto por ponto? olha nunca vi nada assim.

R

é só salvar a imagem como um java.util.File e ler byte a byte…

Eu mesmo uma solução dessa de capturar imagem de webcam,mas estou usando RichFaces pra isso.

Dani_Gomes

Oi raf4ever.
você pode postar o código de como eu tenho q fazer, pois estou quebrando a cabeça e não tem jeito de eu achar a solução.

R

ok mas salva direto no banco, ou salva em uma pasta, e depois acha a mesma pelo caminho. enfim novidade para mim? tem um exemplo aí, como ele pediu?

valeu.

Dani_Gomes

É como se estivesse pegando uma foto no seus documentos e inserindo no banco.
Tem bastantes sites que falam sobre isso, mas pegando pelo jfilechooser.
Mas é que eu não gostaria de utilizar este jfilechooser, eu estou querendo tirar a foto, arquivar ela no hd e pegar este arquivo para inserir no banco.
Para então recuperar ela depois.
O arquivo este da foto é único, cada vez que eu tirar uma foto, ele irá sobreescreve-la.

R

ok poste quando pronto. valeu/ ?

Criado 2 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 13
Participantes 4