我正在为将处理所有图像请求的Web项目编写图像服务器。这个想法是一个最大分辨率的图像(例如3000X2000)将存储在文件系统中。当图像请求来自客户端时,将找到相应的文件,然后调整大小以匹配客户端维度并返回到浏览器。要打破它:
这当然只是一个想法。它使我不必为项目中使用的每个图像保存5种不同的图像尺寸,但这是一种现实的方法吗?这是否被任何主要网站用于生产?如果有数千个请求进入,这会导致内存问题吗?文件返回浏览器后,应该立即释放内存吗?
该文件将返回浏览器:
BufferedImage image = ImageIO.read(f);
OutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
out.close();
使用基本的Java调整大小工具进行的一些测试显示的是几毫秒的速度,因此从理论上讲它可能,但它当然比预先存储调整大小的图像需要更长的时间。也许能够提供与所要求的屏幕尺寸完全相同的尺寸的图像会否定稍微慢一点的图像请求?
private static BufferedImage resize(BufferedImage original, int width, int height, int type) {
BufferedImage resized = new BufferedImage(width, height, type);
Graphics2D g = resized.createGraphics();
g.drawImage(original, 0, 0, width, height, null);
g.dispose();
return resized;
}