Enviar imagem para página dinamicamente

olá pessoal

estou desenvolvendo meu projeto de monografia e preciso criar uma imagem (mapa) dinamico, eu tenho as coordenadas gravadas no banco de dados, gero o mapa conforme as minhas necessidades, e envio para a página porém o modo de envio não é o que eu quero

         @Get
	@Path("/quadra/mapa")
	public void mapa(){
		//desenho o mapa
		Desenha d = new Desenha(util.leitura());
		//definição do tamanho
                d.setSize(1580, 1880);
                //gera a imagem
		BufferedImage imagem = new BufferedImage(d.getWidth(), d.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);  
		Graphics2D graphics = imagem.createGraphics(); 
		d.paintComponent(graphics); 
		graphics.dispose();  
		
                //grava a imagem em disco ******** PROBLEMA ********************
		try {
			ImageIO.write(imagem, "jpg", new  File("C:/Users/Carlos Vinicios/workspace/SMCV/WebContent/mapas/Florida_Paulista.jpg"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}

                // envia a imagem para a página
		result.include("imagem","/mapas/Florida_Paulista.jpg");
	}

no exemplo acima funciona, mas e quando eu colocar isso em um servidor?

as dúvidas são

1 - como eu faço para pegar o path da aplicação, coloquei o caminho completo File(“C:/Users/Carlos Vinicios/workspace/SMCV/WebContent/mapas/Florida_Paulista.jpg”));, mas acho que essa não é a melhor solução.

2 - tem como enviar a imagem sem ter que gravar em disco? ou enviar as cordenadas e a imagem ser gerada no cliente?

se alguém puder me ajudar eu agradeço.

vlw

Cara eu tive que fazer um sistema que gerava imagem no Servidor dessa mesma forma os dados vinham do Banco de Dados!
Ele gravava a imagens no Servidor !

É mais ou menos isso?
vlw

pode ser, essa é uma das soluções, se vc puder me passar como vc fez eu te agradeço

mas se houver uma maneira de mandar a imagem direto para a pagina do cliente ser ser gravada em disco, ou ela ser gerada no cliente para economizar processamento do servidor seria melhor.

vlw

Você pode criar um classe onde vai gerar a imagens e gravar em disco e depois que o usuário pegar a imagem ou ver você apaga ela do disco!!

vlw

como que se apaga uma imagem após o cliente visualiza-lá, faço isso:

         @Get
	@Path("/quadra/mapa")
	public void mapa(){
		//desenho o mapa
		Desenha d = new Desenha(util.leitura());
		//definição do tamanho
                d.setSize(1580, 1880);
                //gera a imagem
		BufferedImage imagem = new BufferedImage(d.getWidth(), d.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);  
		Graphics2D graphics = imagem.createGraphics(); 
		d.paintComponent(graphics); 
		graphics.dispose();  
		
                //grava a imagem em disco ******** PROBLEMA ********************
		try {
			ImageIO.write(imagem, "jpg", new  File("C:/Users/Carlos Vinicios/workspace/SMCV/WebContent/mapas/Florida_Paulista.jpg"));
		} catch (IOException e1) {
			e1.printStackTrace();
		}

                // envia a imagem para a página
		result.include("imagem","/mapas
/Florida_Paulista.jpg");


               // APAGAR IMAGEM????
	}

como eu consigo pegar o caminho no servidor?

vlw

O caminho no servidor você pode colocar um fixo é até melhor! vai depender de como esta no seu servido!
Ex: www.etc.com/pasta/imagens/

e para apagar olha na classe File se você encontra esse método!

File file = new File(); file.deleteOnExit();

vlw

Bom…

Depende muito da necessidade. Mas uma forma simples de fazer, que se adapta a qualquer ambiente, é escrever a imagem no response, de um servlet por exemplo.

Dessa forma vc coloca o a sua imagem apontando para o servlet:

<img src="/caminho/para/seu/Servlet"> 

E dentro do seu servlet após conseguir a sua imagem (criada ou carregada) vc escreve ela na response:


//gera a imagem   
BufferedImage imagem = new BufferedImage(d.getWidth(), d.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);     
// (...) Seu código
                 

// Converte sua imagem em um byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image,"jpg" , baos);

// Valores de exemplo que podem ser ajustados de acordo com a sua necessidade
response.setHeader("Expires", "1");
response.setHeader("Cache-Control", "must-revalidade, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "inline; filename="+filename+".jpg");

response.getOutputStream().write(baos.toByteArray());

Para pegar o path da aplicação veja minha resposta em

http://www.guj.com.br/posts/list/140048.java#1045742

Espero que possa ter lhe ajudado em algo.