JSP显示不同大小的图片

    晕死,CSDN的Blog也真够差,写完了然后发表了,却发现格式被改变了,怎么删也删不掉,好不容易删掉了,然后重写的时候明明粘上去了,却又是空的,真是遇得到。

    以前在写ASP的时候遇到过这个问题,不过,当时没在意,反正想的是能不涉及就跳过吧,呵呵,哪想到,昨天有个学生问到JSP中如何实现,现在看来跳不过了,上网找资料吧。

    基本思路应该比较清楚,就是在显示图片以前,先对图片的大小进行判断,看看是否大于网页中所能允许的最大尺寸,如果超出了,则用最大尺寸来控制输出。

    以前读取图片通常会用这样两种方法:

    1.查阅了JFC的示例程序,里面有这样的用法:

    public Image getImage(String fn) {
      URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();
      URL fileLoc = urlLoader.findResource(fn);
      Image img = this.getToolkit().createImage(fileLoc);

      MediaTracker mt = new MediaTracker(this);
      mt.addImage(img, 0);
      try {
        mt.waitForID(0);
        if (mt.isErrorAny()) {
          System.out.println("Error loading image " + fn);
        }
      } catch (Exception ex) { ex.printStackTrace(); }
      return img;
    }

    2.或者使用这种比较简单的办法:

    img = Toolkit.getDefaultToolkit().getImage("ps/splane.png");

    然后使用getWidth()和getHeight()分别返回图片的宽度和高度,不过,令人郁闷的是,老是返回两个-1,有时可能通过多次读取可能会返回正确的结果,但总是想不通,因为其实这个时候图片已经可用了。网上查了半天也没有查到,看来只好另辟蹊径了。当我使用“JSP getWidth -1”在百度里进行搜索时,发现这样两篇文章,感觉很不错:

    http://tech.eyeah.cn/3117/1113/1132/282066500.html

    http://www.programfan.com/blog/article.asp?id=11352

    如获至宝,发现原来使用文件读取的方式很容易解决这个问题,但其所以然还有待进一步确认。先将代码给出:

    String fn = "dcs.jpg";    //图片文件名
    java.io.File fl = new java.io.File(request.getRealPath(fn));  //生成一个文件对象
    BufferedImage bi = javax.imageio.ImageIO.read(fl);   //读取文件生成一个BufferedImage对象

    需要说明的是,在前一篇文章中,返回物理路径用的是application.getRealPath(),但在测试时不行,会产生异常:Cannot read file,使用request.getRealPath()后正确了。

    依着葫芦画一个瓢,一段完整的代码如下:

    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.awt.image.*"%>  <!--引用包-->
    <%
       int IMG_WIDTH = 200;     //你的图片最大显示宽度
       int IMG_HEIGHT = 40;     //你的图片最大显示高度
    %>
    <html>
    <body>
    <%
       String fn = "dcs.jpg";    //图片文件名
       java.io.File fl = new java.io.File(request.getRealPath(fn));  //生成一个文件对象
       BufferedImage bi = javax.imageio.ImageIO.read(fl);   //读取文件生成一个BufferedImage对象
    
       int width,height;
       width = bi.getWidth();      //读取图片宽度
       height = bi.getHeight();    //读取图片高度
 
       if (width > IMG_WIDTH) width = IMG_WIDTH;       //与最大宽度比较
       if (height > IMG_HEIGHT) height = IMG_HEIGHT;   //与最大高度比较
    %>
    <img src="<%=fn%>" width="<%=width%>" height="<%=height%>"> <!--显示图片-->
    <br>
    Width:<%=width%><br>
    Height:<%=height%>
    </body>
    </html>

    上面已经说了,有的东西还是只是知其然,并不知其所以然,好久没看Java了,看来,又得重新读书……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值