Capturar imagem de uma URL

4 respostas
ThomasCouto

Prezados usuários do fórum,

eu tenho uma url que retorna uma imagem... porém a url não termina com um arquivo de imagem em si (ex: www.google.com.br/google.gif), ele é um método que cria a imagem do banco... Vou dar um exemplo para ser mais prático.

http://www.meu-site.com.br/conteudo/?cdImagem=XXXXX (XXXXX = código da imagem desejada)

isso aí irá retornar uma imagem. Eu tentei capturá-la utilizando
URL url = new URL(imagePath);

BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

int byteTemp;
				while((byteTemp = br.read()) != -1) {
					imageArrayBytes.add((byte)byteTemp);
				}

byte[] imageArrayBytesFinal = new byte[imageArrayBytes.size()];

				for(int j = 0; i < imageArrayBytes.size(); i++) {
					imageArrayBytesFinal[j] = imageArrayBytes.get(j);
				}

E depois instancio a imagem utilizando o array de bytes, Porém retorna uma exceção dizendo que o arquivo não é uma imagem válida

Alguém poderia me ajudar?

4 Respostas

peczenyj

provavelmente vc esta capturando também o cabeçalho http, não?

de uma olhada nos 100 primeiros bytes e tente converter pra char.

D

O que o peczenyj falou faz sentido. Provavelmente você está usando um Servlet ou coisa assim para devolver a imagem. Para isto funcionar do jeito que você quer, você deve alterar o tipo de response dentro do servlet para “image/jpg” ou algo parecido e devolver uma stream da imagem. Sem texto e sem HTML.

ThomasCouto

Ola… Acho que consegui algum progresso… So que apareceu outra dúvida… O arquivo em questão possui 89k aproximadamente… Estou fazendo testes para salvar o arquivo no computador para verificar se o mesmo está sendo ‘baixado’ corretamente. Só que pude comprovar que o arquivo está ficando com 200k (o dobro)…

URL url = new URL("http://meu-site.coml/conteudosite/?cdConteudo=848842");
			InputStream is = url.openStream();
			ArrayList<Byte> imageArrayBytes = new ArrayList<Byte>();
							
			int byteTemp;
			while((byteTemp = is.read()) != -1) {
				imageArrayBytes.add((byte)byteTemp);
			}
			
			File f = new File("C:/Documents and Settings/desenvolvimento/Desktop/arquivo2.jpg");
			
			FileOutputStream saida = new FileOutputStream(f);  
			PrintStream fileSaida = new PrintStream(saida);
			
			byte[] imageArrayBytesFinal = new byte[imageArrayBytes.size()];
			for(int j = 0; j < imageArrayBytes.size(); j++) {
				fileSaida.print(imageArrayBytes.get(j));
			}

O que pode estar acontecendo?

peczenyj

vc consegue abrir essa imagem no browser ?
ou consegue fazer o download dela via um programa gerenciador de download, wget, etc e olhar o conteudo dele num editor hexadecimal?

Eu faria o seguinte, num Linux ou Cygwin

wget -o "imagem.dat" http://orestodaurl?numeros

hexdump -C imagem.dat | less
Criado 4 de outubro de 2007
Ultima resposta 4 de out. de 2007
Respostas 4
Participantes 3