晕死,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了,看来,又得重新读书……