java传送图片:如何从JSP页面传送动态图片来源: 发布时间:星期六, 2009年2月7日 浏览:0次 评论:0
要运行本文代码你需要个Tomcat或者其他支持JSP 1.1Web服务器
当个Web页面带有image/jpeg (或者其他图像格式)MIME类型被发送时你浏览器将那个返回结果当作个图像然后浏览器显示图像作为页面部分或者完全作为图像自身要为你jsp页面设置MIME类型你需要设置页面contentType属性: 然后你需要创建个BufferedImage绘制你动态图像: BufferedImage image = BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); 创建完个BufferedImage后你需要得到图形环境进行绘制个Graphics或者Graphics2D对象: <table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td =code style="FONT-SIZE: 9pt" bgColor=#e6e6e6> Graphics g = image.getGraphics; // or Graphics2d g2d = image.createGraphics;</td></tr> </table> 从现在起你就可以绘制图像内容了对图形环境绘制就会画到BufferedImage最开始这个图像都是黑色因此用你希望背景颜色填充图像是个不错主意然后当你完成图像绘制你需要dispose图形环境: <table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td =code style="FONT-SIZE: 9pt" bgColor=#e6e6e6> g.dispose; // or g2d.dispose;</td></tr> </table> 旦完成图像绘制你在response中返回那个图像你可以使用非标准com.sun.image.codec.jpeg包中JPEGImageEncoder类编码图像或者如果你使用JDK1.4你可以使用标准ImageIO类在使用JPEGImageEncoder时有个窍门技巧你必须从ServletResponse取来ServletOutputStream而不能使用隐含JSP输出变量out <table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td =code style="FONT-SIZE: 9pt" bgColor=#e6e6e6> ServletOutputStream sos = response.getOutputStream; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); // or ImageIO.write(image, "JPEG", out);</td></tr> </table> 这里有个从所有可能方案中(例如g.dispose;或者g2d.dispose;)选取个完整范例.这个例子使用Graphics对象绘制个随机多边形图像通过JPEGImageEncoder绘制你可以自由设置多边形顶点数得到更复杂形状换言的有更多顶点和边 要运行这个范例将从""的间jsp代码放到个名为image.jsp文件中将那个文件放到你web服务器可以找到地方在使用Tomcat情况下是ROOT目录启动Tomcat访问http://localhost:8080/image.jsp <table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td =code style="FONT-SIZE: 9pt" bgColor=#e6e6e6> <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*, com.sun.image.codec.jpeg.*,java.util.*" %> <% // Create image width=200, height=200; BufferedImage image = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // Get drawing context Graphics g = image.getGraphics; // Fill background g.Color(Color.white); g.fillRect(0, 0, width, height); // Create random polygon Polygon poly = Polygon; Random random = Random; for ( i=0; i < 5; i) { poly.addPo(random.nextInt(width), random.nextInt(height)); } // Fill polygon g.Color(Color.cyan); g.fillPolygon(poly); // Dispose context g.dispose; // Send back image ServletOutputStream sos = response.getOutputStream; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); %> 0
相关文章读者评论发表评论 |
|