繁体   English   中英

JSP如何缩放图像?

[英]JSP How to scale an image?

无论如何缩放图像然后在jsp页面中显示? 检索并显示图像时,我想显示所有相同尺寸的照片。 是否有任何API可以做到这一点? 我从谷歌搜索过,我发现的是关于使用takeit缩放图像,但无法在Web应用程序中使用。

您可以使用内置的Java 2D API此处为基本的Sun教程)。

基本上,您需要创建一个Servlet ,它在doGet()方法中获取原始图像的InputStream ,将其传递给Java 2D API,然后将其写入HTTP响应的OutputStream 然后,您只需将此Servlet映射到web.xml的某个url-pattern ,例如/thumbs/*并在HTML <img>元素的src属性中调用此Servlet。

这是一个基本的启动示例(您仍然需要自己按照自己的方式处理意外情况):

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // First get image file name as request pathinfo (or parameter, whatever you want).
    String imageFilename = request.getPathInfo().substring(1);

    // And get the thumbnail dimensions as request parameters as well.
    int thumbWidth = Integer.parseInt(request.getParameter("w"));
    int thumbHeight = Integer.parseInt(request.getParameter("h"));

    // Then get an InputStream of image from for example local disk file system.
    InputStream imageInput = new FileInputStream(new File("/images", imageFilename));

    // Now scale the image using Java 2D API to the desired thumb size.
    Image image = ImageIO.read(imageInput);
    BufferedImage thumb = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics2D = thumb.createGraphics();
    graphics2D.setBackground(Color.WHITE);
    graphics2D.setPaint(Color.WHITE); 
    graphics2D.fillRect(0, 0, thumbWidth, thumbHeight);
    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);

    // Write the image as JPG to the response along with correct content type.
    response.setContentType("image/jpeg");
    ImageIO.write(thumb, "JPG", response.getOutputStream());
}

使用web.xml映射的servlet如下:

<servlet>
    <servlet-name>thumbServlet</servlet-name>
    <servlet-class>com.example.ThumbServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>thumbServlet</servlet-name>
    <url-pattern>/thumbs/*</url-pattern>        
</servlet-mapping>

这可以使用如下:

<img src="thumbs/filename.jpg?w=100&h=100" width="100" height="100">

注意:不,这不能单独使用JSP,因为它是一种不适合此任务的视图技术。


注意2:这是一项非常昂贵的(CPU密集型)任务,请记住这一点。 您可能需要考虑事先自己缓存或预生成拇指。

注意:不,这不能单独使用JSP,因为它是一种不适合此任务的视图技术。

从技术上讲,你可以做到这一点,但事实上它并不是可取的。

是的,我会长时间缓存图像,同时识别原始图像的更改,然后仅在原始图像更改时(或缓存过期,可能是上次访问图像一周后)重新创建已调整大小的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM