Como converter uma imagem em InputStream?

Eai galera…Preciso converter uma imagem em InputStream. Ou sei lá…converter de BufferedImage para InputStream!

eu tenho:

[code]…

Image image=selected.getImage();
System.out.println(“Imagem Scanner”+image);
BufferedImage bufferedImage=new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
bufferedImage.createGraphics().drawImage(image, 0, 0, null);

File nfile=new File(nome);
OutputStream tmp=new FileOutputStream(nfile);
ImageCodec.createImageEncoder(ext, tmp, null).encode(bufferedImage);
tmp.close();[/code]

Eu tenho que ter um InputStream para salva-lo em um servidor ftp

ftp.storeFile( nomeArquivo, is );

onde is é um InputStream.

Vlw :?

hm… pelo que vi voce salvou sua imagem num arquivo temporário, nao? “temp”…

voce nao pode abrir um inputstream desse arquivo?!

um fileinputstream resolveria nesse caso…

Entao Renato, eu tenho que pegar este OutputStream tmp e transforma-lo em InputStream…mais depois que ele adicionou a imagem e o encoder.

ImageCodec.createImageEncoder(ext, tmp, null).encode(bufferedImage); tmp.close();

Cara vc sabe converter OutputStream para InputStream ?

[quote=Raarm]
Cara vc sabe converter OutputStream para InputStream ?[/quote]

A maneira que conheço é assim:
Usa um ByteArrayOutputStream e o IOUtils para escrever a imagem num array de byte.
Depois pega esse array e joga num ByteArrayInputStream , que é um inputStream e portanto pode ser passado no metodo do ftp. Claro que vc pode criar uma classe que faz estas operações e se comporta como ambos um outputstream e um inputstream , mas acho melhor não fazer isso.

Tlv com NIO exista uma opção mais eficiente, mas nunca vi . Se alguém souber, por favor diga.

Consegui…assim:

                            [code]ByteArrayOutputStream bos = new ByteArrayOutputStream();   
            	JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos); 
                JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage); 
                int quality = 100; // Use between 1 and 100, with 100 being hest quality 
                quality = Math.max(0, Math.min(quality, 100)); 
                param.setQuality((float)quality / 100.0f, false); 
                encoder.setJPEGEncodeParam(param); 
                encoder.encode(bufferedImage);
                InputStream is = new ByteArrayInputStream(bos.toByteArray()); [/code]

Mas sei lah…este JPEGImageEncoder serve para qualquer imagem? Eu coloquei a extensão png e este codec serviu…

Acho que poderia ser algo parecido com:

ImageEncoder encoder =  ImageCodec.createImageEncoder(ext, tmp, null); 

para ser mais genérico, mas nao sei como associar isto com bos.