Java转换图像格式,内存占用少

时间:2010-08-31 21:09:42

标签: java image format scaling

我正在编写一个Web应用程序,允许用户以多种格式上传图像(例如png,jpg,bmp)。上传图像后,系统应将其转换为“png”并将其缩放到预定义的分辨率。

要转换图像,我使用方便的方法:

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

这是问题的起点。 Image javax.imageio.ImageIO.write的第一个参数是RenderedImage。 Java Doc声明唯一已知的实现是BufferedImage

我试图找到一种方法将java.awt.Image转换为BufferedImage,但似乎不可能。但是,可以draw an image on a BufferedImage

问题是每次创建一个新的BufferedImage都非常耗费内存。我可以开始创建一个BufferedImage池,但我正在寻找聪明/新闻的想法。

5 个答案:

答案 0 :(得分:5)

尝试使用Thumbnailator库:http://code.google.com/p/thumbnailator/

示例代码:

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

库还提供更多缩放,大小调整,裁剪,旋转,水印等功能。

答案 1 :(得分:1)

答案 2 :(得分:1)

您可以一遍又一遍地重复使用一个缓冲图像,在使用ImageIO.write方法时,使用subimage来适当调整大小

答案 3 :(得分:0)

您可以查看BufferedImage的实现并实现您自己的(可能是基于文件的实现?)。这些课程通常很容易阅读,通常有50-70%的评论和清晰的写作。

他们给出了消息来源,为什么不利用'em?

答案 4 :(得分:0)

启动netpbm或imagemagick等本机转换器。