Come ottenere un InputStream da un'immagine bufferizzata?
-
19-08-2019 - |
Domanda
Come posso ottenere un InputStream da un oggetto BufferedImage? Ho provato questo, ma ImageIO.createImageInputStream () restituisce sempre NULL
BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);
La miniatura dell'immagine è stata generata correttamente poiché posso dipingere bigImage su un JPanel con successo.
Grazie.
Soluzione
Se stai provando a salvare l'immagine in un file prova:
ImageIO.write(thumb, "jpeg", new File(....));
Se vuoi solo ai byte prova a fare la chiamata di scrittura ma passale un ByteArrayOutputStream da cui puoi estrarre l'array di byte e farne quello che vuoi.
Altri suggerimenti
Da http: //usna86-techbits.blogspot .com / 2010/01 / inputstream-da-url-bufferedimage.html
Funziona benissimo!
Ecco come puoi crearne uno InputStream per un'immagine con buffer:
URL url = new URL("http://www.google.com/intl/en_ALL/images/logo.gif"); BufferedImage image = ImageIO.read(url); ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(image, "gif", os); InputStream is = new ByteArrayInputStream(os.toByteArray());
Sovrascrivendo il metodo inByteArray ()
, restituendo lo stesso buf
(non copiando), è possibile evitare problemi relativi alla memoria. Questo condividerà lo stesso array, non creando un altro della dimensione corretta. L'importante è usare il metodo size ()
per controllare il numero di byte validi nell'array.
final ByteArrayOutputStream output = new ByteArrayOutputStream() {
@Override
public synchronized byte[] toByteArray() {
return this.buf;
}
};
ImageIO.write(image, "png", output);
return new ByteArrayInputStream(output.toByteArray(), 0, output.size());