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?
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 !
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.
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????
}
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