Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java convert image format with low memory footprint

I'm writing a Web application that let user upload images in several formats (e.g. png,jpg,bmp). After the image has been uploaded the system should convert it to "png" and scale it to a predefined resolution.

To convert the image I use the handy method:

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

Here's where the problem start. The first argument of Image javax.imageio.ImageIO.write is a RenderedImage. The Java Doc states that the only known implementation is BufferedImage.

I try to find a way to convert a java.awt.Image to a BufferedImage, but it doesn't seems possible. However, it is possible to draw an image on a BufferedImage.

The problem is that creating a new BufferedImage each time is very memory expensive. I can start creating a pool of BufferedImage but I'm looking for clever/news ideas.

like image 812
Dani Cricco Avatar asked Aug 31 '10 21:08

Dani Cricco


1 Answers

Try Thumbnailator library: http://code.google.com/p/thumbnailator/

Example code:

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

Library offers also much more like scaling, sizing, cropping, rotating, watermarking etc.

like image 135
muras Avatar answered Oct 13 '22 00:10

muras