Estou com uma dúvida e acredito que o mais difícil ja encontrei pesquisando por aqui, só que no meu caso é um pouco diferente:
Tenho uma imagem em bytes em meu código, preciso redimensiona-la (diminuir tamanho e kb) transformar em bytes de novo em seguida apresenta-la em uma JSP:
Todos os exemplos que eu vejo, as pessoas fazem upload da imagem redimensionam e depois gravam em disco, que não é oq quero neste momento.
A unica coisa mais próxima que encontrei perto doq preciso é isto aqui:
BufferedImage imageBuffer = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
2. Graphics2D graphics2D = imageBuffer.createGraphics();
3. // aqui é o segredo... redimensiona antes de setar o graphics, com o algoritmo de cálculo de média da área em pixels da imagem...
4. Image scaledImage = imagem.getScaledInstance(largura, altura, Image.SCALE_AREA_AVERAGING);
5. graphics2D.drawImage(scaledImage, 0, 0, largura, altura, null);
6. graphics2D.dispose();
Só que neste caso como eu carrego os meus bytes nesse imageBuffer?
Ao fazer este redimensionamento como faço pra transformar a imagem em bytes?
Obrigado e caso eu consiga alguma coisa também posto aqui!!!
Pessoal, pra ficar mais simples minha explicação segue abaixo o código que tenho:
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
byte[] foto = null;
//recebe bytes da imagem
foto = ((String)request.getAttribute("foto")).getBytes();
//tratamento da imagem <-- Aqui que está a dúvida
out.write(foto);
O ponto onde comentei é onde gostaria de fazer o tratamento da imagem…
Pronto, agora você tem um BufferedImage, contendo a sua imagem. Sem a criação de nenhum arquivo. Para redimensionar o BufferedImage, você usa um desses três métodos: http://www.guj.com.br/posts/list/134202.java#722303
Depois, use o método ImageIO.write para converter sua imagem novamente em bytes. Esse método, joga os dados da imagem para um OutputStream. Novamente, existe a classe ByteArrayOuputStream que recebe os dados de um local qualquer e depois de retorna o array de bytes desses dados.
Você explica muito bem, agora deu pra entender oque cada coisa faz…
Muito obrigado mesmo!!
Só mais uma pergunta, sem querer abusar, eu já testei o ImageIO no meu serviço, mais parece que o Java lá está um pouco antigo pelo jeito, pois não reconhece essa classe, você teria outra alternativa fora essa classe??
No início do seu método? A classe ImageIO existe desde o Java 1.4. Se você não tem, é pq está usando algo ainda mais antigo.
Aí não sobram muitas alternativas a não ser o %29"]Toolkit.getDefaultToolkit().createImage(byte[]). E para redimensionar a imagem use o Image.getScaledInstance. Mas sobram poucas alternativas para salvar a imagem de maneira fácil.
Se você estivar programando um applet, pode também carregar a imagem usando o getImage. Nenhum desses métodos, no entanto, são tão bons quanto o ImageIO. Verifique a possibilidade de fazer um update do Java na empresa onde vc trabalha.
Cara consegui importar a classe, sabe oque era? estava faltando incluir a library JRE 5.1 no projeto putzzz…
Viu, aquele comentario super bacana que você colocou no dia 19 percebi que você não incluiu o
ServletOutputStream out = response.getOutputStream();
Fiquei na dúvida, agora pois vc tinha comentado do ByteArrayOuputStream, agora não sei se devo colocar ele ou não rs, sendo que, eu preciso imprimir esta imagem de bytes em minha JSP…