我正在编写一个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池,但我正在寻找聪明/新闻的想法。
答案 0 :(得分:5)
尝试使用Thumbnailator库:http://code.google.com/p/thumbnailator/
示例代码:
Thumbnails.of("large-picture.jpg")
.scale(1.0)
.outputFormat("png")
.toOutputStream(os);
库还提供更多缩放,大小调整,裁剪,旋转,水印等功能。
答案 1 :(得分:1)
有很多关于这个的Java库和SO帖子。你看过了吗?
答案 2 :(得分:1)
您可以一遍又一遍地重复使用一个缓冲图像,在使用ImageIO.write方法时,使用subimage来适当调整大小
答案 3 :(得分:0)
您可以查看BufferedImage的实现并实现您自己的(可能是基于文件的实现?)。这些课程通常很容易阅读,通常有50-70%的评论和清晰的写作。
他们给出了消息来源,为什么不利用'em?
答案 4 :(得分:0)
启动netpbm或imagemagick等本机转换器。