Utilize o método acima para transformar a imagem(ou qualquer outro arquivo) em um array de bytes…
E quanto ao redimensionamento, experimente redimensionar somente o componente que exibe a imagem(não tenho certeza se funciona para swing)
J
juliocbq
Pode usar um byteArrayOutputStream para copiar os bytes.
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
ByteArrayOutputStream buff = new ByteArrayOutputStream();
try {
ImageIO.write(bi, "JPG", buff);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] bytes = buff.toByteArray();
Para processar a imagem, pode usar um WritableRaster. Essa classe te dá acesso completo aos pixel da imagem.
Ou se preferir fazer algo mais rústico, use o próprio vetor de bytes.
G
gilsonpolito
Ola pessoal, antes de mais nada obrigado por tentarem me ajudar.
biro o meu problema é justamente que não que ter que gravar a imagem redimensionada em disco para depois obter um File e recuperar o byte[].
juliocbq onde entraria a imagem que possuo em memória neste processo?
Ola juliocbq,
Me desculpe, mas não estou conseguindo entender… O método que você está propondo possui um parametro BufferedImage bi. Como posso obter este parametro a partir de um java.awt.Image?
Obrigado novamente!!
J
juliocbq
não use o awt.Image.
Use BufferedImage do swing, e ImageIO para copiar os dados. BufferedImage, e ImageIO são bem mais otimizadas.
Quando se vai trabalhar com imagens, deve-se pensar em performance também.
G
gilsonpolito
Como você faria o seguinte:
ler uma imagem do disco (exemplo: Foto.jpg)
Redimensionar a imagem para 300,300
Recuperar a imagem redimensionada e grava-la no banco de dados (aqui que eu preciso do byte[])
Basicamente o que preciso é isto.
O que estou fazendo é:
leio o arquivo do disco;
crio um byte[] da imagemOriginal;
**preciso redimensionar
** criar um novo byte[] da imagem redimensionada
abaixo tem mais ou menos um exemplo do que estou precisando…
importjava.awt.*;importjava.awt.image.BufferedImage;importjava.io.*;importjava.util.logging.*;importjavax.imageio.ImageIO;importjavax.imageio.stream.ImageInputStream;importjavax.swing.ImageIcon;publicclassNewJFrameextendsjavax.swing.JFrame{publicNewJFrame(){initComponents();}@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">privatevoidinitComponents(){jfcImagem=newjavax.swing.JFileChooser();lblImagem=newjavax.swing.JLabel();jButton1=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);lblImagem.setText("jLabel1");getContentPane().add(lblImagem,java.awt.BorderLayout.CENTER);jButton1.setText("jButton1");jButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jButton1ActionPerformed(evt);}});getContentPane().add(jButton1,java.awt.BorderLayout.PAGE_END);pack();}// </editor-fold>privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){jfcImagem.showOpenDialog(this);if(jfcImagem.getSelectedFile()!=null){try{try{FileInputStreamfis=newFileInputStream(jfcImagem.getSelectedFile());imagemOriginal=newbyte[fis.available()];fis.read(imagemOriginal);fis.close();}catch(IOExceptionex){Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE,null,ex);}Imageimage=Toolkit.getDefaultToolkit().createImage(imagemOriginal);BufferedImagethumbImage=newBufferedImage(200,200,BufferedImage.TYPE_INT_RGB);Graphics2Dgraphics2D=thumbImage.createGraphics();graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics2D.drawImage(image,0,0,200,200,null);ImageInputStreamiis=ImageIO.createImageInputStream(image);imagemIcone=newbyte[(int)iis.length()];iis.read(imagemIcone);lblImagem.setIcon(newImageIcon(imagemIcone));}catch(IOExceptionex){Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE,null,ex);}}}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newNewJFrame().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JButtonjButton1;privatejavax.swing.JFileChooserjfcImagem;privatejavax.swing.JLabellblImagem;// End of variables declarationprivatebyte[]imagemOriginal;privatebyte[]imagemIcone;}
Julio, eu entendo sua posição sobre o ImageIO e BufferedImage mas quando a gente precisa manipular informações de desenho na imagem não tem como escapar muito de usar Image e Graphycs =)