我在服务器上有一堆图像。当客户端请求URL为图像时,客户端可以指定接收完整图像或获取图像的缩略图。所以,我正在寻求实现一个处理请求的servlet类型解决方案,并在需要时根据需要生成缩略图。它需要支持jpg,gif,tif,png。
看起来使用BufferedImage,JAI和/或ImageMagick是java的最佳选择(来自此post)。还有我可能错过的其他人吗?
另外,有没有人在java中实现类似的东西?如果是这样,对解决方案的任何建议都给出(1)相当下降的质量缩略图,(2)在处理图像时不会占用大量内存,(3)可接受的响应时间?
答案 0 :(得分:6)
答案 1 :(得分:1)
这种解决方案的核心代码是
img.getScaledInstance(w, h, Image.SCALE_DEFAULT);
如果您不喜欢质量,可以使用Image.SCALE_SMOOTH
。
我一直在一个不太活跃的网站(每天约300个用户)上使用这个(包括一些额外内容,比如用图案替换颜色),但是一个用于提供许多图像的一个,这个没有没有造成任何问题,所以你可以自由使用它。
使用ImageIO.write(image, formatName, response.getOutputStream())
在回复中发送图片。
答案 2 :(得分:1)
另一种解决方案是对一些命令行实用程序执行某些系统调用,例如非java imagemagick和链接输出生成的文件。
答案 3 :(得分:1)
另请参阅Loading large images as thumbnails without memory issues in Java?以获得有关使用javax.imagio.ImageReader以最小内存开销创建缩略图的良好答案。