2010-08-31 11 views
5

Sto scrivendo un'applicazione Web che consente all'utente di caricare immagini in diversi formati (ad esempio png, jpg, bmp). Dopo che l'immagine è stata caricata, il sistema dovrebbe convertirlo in "png" e ridimensionarlo a una risoluzione predefinita.Formato immagine convertito in Java con ingombro di memoria ridotto

per convertire l'immagine che uso il metodo pratico:

javax.imageio.ImageIO.write(im, type, baos); 

Ecco dove l'inizio problema. Il primo argomento di Image javax.imageio.ImageIO.write è un RenderedImage. Il documento Java afferma che l'unica implementazione nota è BufferedImage.

Cerco di trovare un modo per convertire un java.awt.Image in un BufferedImage, ma non sembra possibile. Tuttavia, è possibile draw an image on a BufferedImage.

Il problema è che la creazione di una nuova BufferedImage ogni volta è molto costosa. Posso iniziare a creare un pool di BufferedImage ma sto cercando idee intelligenti/di notizie.

risposta

0

Si potrebbe osservare l'implementazione di BufferedImage e implementare il proprio (un'implementazione basata su file, forse?). Queste classi sono generalmente abbastanza semplici da leggere, spesso il 50-70% dei commenti e scritte in modo chiaro.

Distribuiscono le fonti, perché non le usano?

1
+1

No, non ho controllare loro. Avete qualche raccomandazione per questo problema. Voglio dire, convertire le immagini con un basso ingombro di memoria –

+0

No, scusa, non ho usato nessuno di loro quindi non posso raccomandare nulla. Probabilmente puoi trovare dei risultati su Google o ovunque, ma la cosa migliore da fare è provarli tu stesso. –

1

di poter riutilizzare un'immagine buffer più e più volte, utilizzando subimage al formato appropriato quando è il momento di utilizzare l'ImageIO.write metodo

+0

Ahap, era l'idea originale (come la domanda descrive) –

0

Avvia un convertitore nativo come netpbm o imagemagick.

5

Prova Thumbnailator libreria: http://code.google.com/p/thumbnailator/

codice Esempio:

Thumbnails.of("large-picture.jpg") 
     .scale(1.0) 
     .outputFormat("png") 
     .toOutputStream(os); 

Biblioteca offre anche molto più simile ridimensionamento, ridimensionamento, ritaglio, rotazione, ecc watermarking

+0

Questa è una buona libreria, ma utilizza anche BufferedImage. Ci sono approcci che non usano BufferedImage? – user2910265

Problemi correlati