Imagem salvando toda embasada

bom pessoal estou fazendo um programa que salva uma imagem de uma url especifica, só que ela salva toda embasada tem outro metodo que possa ser salvo uma imagem?

o programa que fiz é esse

private void salva() { try { url = new URL(URL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Cookie", this.cookie); conn.setRequestProperty("Content-Language", "en-US"); conn.setDoInput(true); conn.setDoOutput(true); InputStream is = conn.getInputStream(); OutputStream os = new FileOutputStream(this.entradagif); byte[] b = new byte [2048]; int length; while ((length = is.read(b)) != -1) { os.write(b, 0, b.length);// } is.close(); os.close(); }catch (IOException ex){ this.dadosLista.add("Pesquisa Indisponivel - Tente de Novo."); this.dados = null; this.dados = (String[]) dadosLista.toArray(new String[0]); System.exit(0); } }

jah tentou usar a biblioteca IOUtils? http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.OutputStream)

acho q ficaria assim seu código…

private void salva() {  
        try {  
            url = new URL(URL);  
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setRequestProperty("Cookie", this.cookie);  
            conn.setRequestProperty("Content-Language", "en-US");  
            conn.setDoInput(true);  
            conn.setDoOutput(true);  
            InputStream is = conn.getInputStream();  
            IOUtils.copy(is, new FileOutputStream(this.entradagif));  
            is.close();  
            os.close();  
        }catch (IOException ex){  
            this.dadosLista.add("Pesquisa Indisponivel - Tente de Novo.");  
            this.dados = null;  
            this.dados = (String[]) dadosLista.toArray(new String[0]);  
            System.exit(0);  
        }  
    }

ve se dá certo

o kadu.m.lino
deu certo, fico perfeito a imagem agora…
obrigado pela ajuda ai

Provavelmente o único erro do seu código era que faltava fazer flush() antes do close(). Mas a IOUtils simplifica bastante esse tipo de operação, além de deixar o código bem mais legível.

Só um detalhe, “embasado” é algo que tem base, como na frase “ele afirmou com embasamento científico”.

Bem diferente de “embaçado”, que significa “sem cor, embaciado, turvo”.

O ViniGodoy, obrigado pela dica ai…

não sabia essa diferença…rsrs

uma outra pergunta, tem algum filtro que consiga transformar as partes com cor em uma unica cor ( no caso preto) e onde for branco deixar como está

eu estou usando threshold mas não fica como eu preciso, tem algum outro filtro?

eu pesquisei aqui, e pelo que entendi, acho que se eu usar um filtro negativo resolve meu problema.
Mas eu num acho nada desse filtro em java, alguém tem ideia como faço?

Pode postar um exemplo da imagem e de como vc gostaria que ficasse? (nem que vc produza o resultado no photoshop?)

[quote=RafaTeko]uma outra pergunta, tem algum filtro que consiga transformar as partes com cor em uma unica cor ( no caso preto) e onde for branco deixar como está

eu estou usando threshold mas não fica como eu preciso, tem algum outro filtro?[/quote]

O que é branco, para você? É (R,G,B) = (255,255,255) ou algum cinza bem clarinho também é branco?

ViniGodoy - Desculpa não coloca uma imagem aqui, que o programa que estou fazendo fico em casa no note, e só quando eu chegar em casa…rsrsrs

entanglement - Então, é isso mesmo, a parte que quero deixa em branco são varios pontinhos coloridos (tipo imagem quando está fora de sintonia na TV só que com tons de varias cores) = (R,G,B) = (255,255,255) e onde está o branco meio cinza, queria deixa preto.

Se caso quiser a imagem, quando eu chega em casa eu coloca a imagem e como eu gostaria que ficasse

[quote=RafaTeko]ViniGodoy - Desculpa não coloca uma imagem aqui, que o programa que estou fazendo fico em casa no note, e só quando eu chegar em casa…rsrsrs

entanglement - Então, é isso mesmo, a parte que quero deixa em branco são varios pontinhos coloridos (tipo imagem quando está fora de sintonia na TV só que com tons de varias cores) = (R,G,B) = (255,255,255) e onde está o branco meio cinza, queria deixa preto.[/quote]

Melhor você postar a imagem e o resultado desejado. Você quer transformar todos os pontos, exceto os que são absolutamente brancos (RGB = 255,255,255) em pretos? Ou você quer deixar os pontos coloridos em branco, ou conservá-los coloridos?

Seria bom postar a imagem. Se o problema for ruído, uma forma de reduzir é usar o filtro da mediana. Basicamente, vc percorre a imagem e, para cada pixel, vê a cor que mais se repete nos 9 pixels vizinhos e usa ela no lugar. Ele tem uma vantagem sobre os filtros da média, pois ele praticamente não gera “blur”.

Quando tiver em casa posso postar um exemplo aqui.

Outra possibilidade, se o ruído for mais ou menos constante, é usar uma transformada de Fourrier. Mas isso não é nem um pouco trivial de se explicar aqui no tópico, embora os resultados sejam ótimos.

Se quiser processar imagens, recomendo dar uma olhada nesse site aqui:
http://www.jhlabs.com/ip/filters/

O filtro que falei (da Mediana) é esse aqui:
http://www.jhlabs.com/ip/filters/MedianFilter.html

estão ai a imagem como é, e como eu quero que fique

é um captcha, e pra fica como eu quero, eu fiz no foto shop, usei a ferramenta inversão de cores e depois deu um threshold, só isso
o threshold eu uso em java já, só que a inversão de cores, eu num sei se tem na biblioteca do java, pelo menos num achei nada sobre ele

http://imageshack.us/photo/my-images/715/entradaa.jpg/
http://imageshack.us/photo/my-images/338/entradabinarizado.jpg/

o ViniGodoy, eu tinha visto esse site que me mando falando sobre os filtros de imagem, só que não cheguei a ler todo, tava sem tempo.

Eu faria o seguinte:
a) Converter para grayscale;
b) Aplicar uma operação de abertura morfológica.

Se você ao invés de aplicar uma abertura aplicar duas erosões e uma restauração morfológica, é capaz até de conseguir um resultado ainda melhor do que aquele ali.

[quote=ViniGodoy]Eu faria o seguinte:
a) Converter para grayscale;
b) Aplicar uma operação de abertura morfológica.

Se você ao invés de aplicar uma abertura aplicar duas erosões e uma restauração morfológica, é capaz até de conseguir um resultado ainda melhor do que aquele ali.
[/quote]

mais tipo deixa eu ver se entendi o que falou.

aplico o grayscale e a operação de abertura morfológica, mas só isso num ira sair aquele efeito de fundo,
eu preciso tirar ele e deixa só as letras visíveis como fiz na segunda imagem.

Apesar de que no teu caso tá bem fácil tratar aquela imagem. O tom de cinza é bem específico, vc poderia binarizar por ele.

Baixe um programa que fiz no meu mestrado:
https://dl.dropbox.com/u/8258820/Imagem.zip

Ele permite que você teste diversos filtros. Quando achar a combinação certa, é só implementar.