1

我在服务器上有一堆图像。当客户端请求图像的 url 时,客户端可以指定接收完整图像或获取图像的缩略图。因此,我希望实现一个 servlet 类型的解决方案来处理请求,并在需要时按需生成缩略图。它需要支持jpg、gif、tif、png。

看起来使用 BufferedImage、JAI 和/或 ImageMagick 是 java 的最佳选择(来自这篇文章)。还有其他我可能错过的吗?

另外,有没有人在java中实现过类似的东西?如果是这样,关于提供(1)相当下降质量缩略图的解决方案的任何建议,(2)在处理图像时不会占用大量内存,(3)可接受的响应时间?

4

4 回答 4

7

Image.getScaledInstance 的危险

于 2009-12-10T20:13:22.243 回答
1

这种解决方案的核心代码行是

img.getScaledInstance(w, h, Image.SCALE_DEFAULT);

哪里,如果你不喜欢质量,你可以使用Image.SCALE_SMOOTH.

我一直在一个不太活跃的网站(每天约 300 个用户)上使用这个(被一些额外的东西包围,比如用图案替换颜色),但是一个提供许多图像的网站,这并没有导致任何问题,因此您可以自由使用它。

用于ImageIO.write(image, formatName, response.getOutputStream())在响应中发送图像。

于 2009-12-10T20:05:34.473 回答
1

另一种解决方案是对命令行实用程序(如非 java imagemagick)进行一些系统调用,并链接输出生成的文件。

于 2009-12-10T20:30:31.367 回答
1

另请参阅在 Java 中将大图像加载为缩略图而没有内存问题?有关使用 javax.imagio.ImageReader 创建缩略图的好答案,并且内存开销最小。

于 2012-01-29T19:58:22.480 回答