Servlet中图像的缩放

在我们浏览网页的时候,经常会看到一些较小的图片,它们的实际尺寸可能要比显示的尺寸大得多。
在Web 开以中,有很多需求都要求显示图像的缩略图,可能是由于版面的限制,也有可能是功能设计的需要。
例如,一个图片网站为了用户方便浏览图片,在一个页面中显示几十,幅图片的缩略图,当用户单击缩略图时,
再显示正常的图片.
 现在本人就来介绍如何对一幅图片时缩放。
 实例开发主要有下列步骤/
  Step1 编写PicZoom.java
    picZoom是一个工具类,用于对图像进行缩放,它提供了两个静态方法。根据指定的输出大小图像进行缩放。其中一个方法接受图像文件
的文件名,另一个方法接受java.awtImage对象。

                               <<<<<<<<PicZoom.java的代码示例>>>>>>>>>>>>
package programmer;

import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import javax.swing.ImageIcon;

public class PicZoom {
    public static BufferedImage zoom(String srcFileName, int outputWidth,
                                     int outputHeight) {
        //使用图像源文件名创建ImageIcon对像
        ImageIcon imgIcon = new ImageIcon(srcFileName);
        //得到Image对象
        Image img = imgIcon.getImage();
        return zoom(img, outputWidth, outputHeight);
    }

    public static BufferedImage zoom(Image srcImage, int outputWidth,
                                     int outputHeight) {
        //构造一个预定义的图像类型的BufferedImage对象
        BufferedImage buffImg = new BufferedImage(outputWidth, outputHeight,
                                                  BufferedImage.TYPE_INT_RGB);
        //创建Graphics2D对象,用于在BufferedImage对象上绘图
        Graphics2D g = buffImg.createGraphics();
        //设置图形上下文的当前颜色为白色
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, outputWidth, outputHeight);
        //按照缩放的大小在BufferedImage对象上绘制原始图像
        g.drawImage(srcImage, 0, 0, outputWidth, outputHeight, null);
        //释放图形上下文使用的系统资源的。
        g.dispose();
        return buffImg;
    }
}

Step2 编定ImageHandlerServlet.java
  这个Servlet类根据客户端请求的图片ID号,调用 PicZoom 类的zoom()方法缩小图像,然后向客户端输出图像的缩略图。
                                   <<<<<<<<ImageHandlerServlet.java>>>>>>>>>>>>
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import programmer.PicZoom;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;

public class ImageHandlerServlet extends HttpServlet {
 
    public void service(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
    
        String strId = request.getParameter("id");
        if (null == strId || "".equals(strId)) {
            throw new ServletException("图像参数错误");
        }
        int id = Integer.parseInt(strId);
        String srcImgFileName = null;
        /*
        此处为简单,所以使用了switch/case语句,硬编码了1.jpg这幅图片,
    读者可以将图片数据保存到数据库中,根据请求的参数取出相应的图片.
       或者直接保存在硬盘上,为所有的图片文件做一个索引文件
    得到请求参数后,通过查找索引文件得到图片的路径。
        
         **/
        switch (id) {
        case 1:
            srcImgFileName = getServletContext().getRealPath("/Image/1.jpg");
            break;
        case 2:
            break;
        default:
            throw new ServletException("图像参数错误");
        }
        response.setContentType("image/jpeg");
        ServletOutputStream sos = response.getOutputStream();
        //调 用PicZoom 类的静态方法Zoom   对原始图像时行缩放。
        BufferedImage buffImg = PicZoom.zoom(srcImgFileName, 80, 80);
        //创建JPEG图像编码器,用于编码内存中的图像数据到JPEG数据输出流。
        JPEGImageEncoder jpgEncoder = JPEGCodec.createJPEGEncoder(sos);
        // 编码BufferedImage对象到 JPEG数据输入流
        jpgEncoder.encode(buffImg);
        sos.close();
    }
}
在这个类中,我们判断如果请求参数错误,则抛出ServletException异常。

step3:编 写image.jsp
这个页面用于显示图像的缩略图。
                                             <<<<<<<<image.jsp>>>>>>>>>>>>
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
image
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<a href="image1.jsp"><img alt="点击小图片看大图片" src="image?id=1" /></a>
</body>
</html>
因为image页面只是用于测式图像缩放的功能是否完成,所以图像的URL后附的ID参数值是硬编码的,实际应用时。根据服务器图像文件的编号
来动态产生ID值
Step4编写Show.jsp
这个页面用于显示正常图片

                                             <<<<<<<<show.jsp>>>>>>>>>>>>
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
image1
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<img alt="fd" src="Image/1.jpg" width="400" height="500"/>
</body>
</html>
step5:部署Servlet
<servlet>
    <servlet-name>imagehandlerservlet</servlet-name>
    <servlet-class>programmer.ImageHandlerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>imagehandlerservlet</servlet-name>
    <url-pattern>/image</url-pattern>
  </servlet-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值