BufferedImage在jsp页面显示的问题

polarishb 2008-05-11 11:15:45
我的jsp页面获取了一个BufferedImage 对象,但是无法显示出来,只是显示一个红X。
jsp页面代码


response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

DrawLine dl=new DrawLine();BufferedImage image =dl.drawReflexLine(20, 10, 0);
ImageIO.write(image, "JPEG", response.getOutputStream());



其中
DrawLine dl=new DrawLine();
BufferedImage image =dl.drawReflexLine(20, 10, 0);
我放在swing里面



DrawLine dl = new DrawLine();
BufferedImage image = dl.drawReflexLine(40, 50, 0);
jLabel1 = new JLabel(new ImageIcon(image));
jScrollPane2.getViewport().add(jLabel1);




就可以正确的显示出图像。
这说明我的dl.drawReflexLine(40, 50, 0);方法没有错误

所以应该只是jsp页面显示BufferedImage 出现了问题,但是我上面的写法是根据网上一个准确运行的验证码程序改成的,应该也没有错误,不知道到底是什么问题?
...全文
454 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2008-05-12
  • 打赏
  • 举报
回复
生成验证码的程序,你参考这个看看吧! 建议用 servler
http://www.java2000.net/viewthread.jsp?tid=93
老紫竹 2008-05-12
  • 打赏
  • 举报
回复
out.clearBuffer();// 增加这一句,删除以前的所有输出
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);


DrawLine dl=new DrawLine();BufferedImage image =dl.drawReflexLine(20, 10, 0);
ImageIO.write(image, "JPEG", response.getOutputStream());
hoszone 2008-05-12
  • 打赏
  • 举报
回复
其实就是说你当前的jsp页面是你图片的路径,把你使用图片的地方的src写成你当前的jsp就可以了...你试试吧....
hoszone 2008-05-12
  • 打赏
  • 举报
回复
http://www.javaresearch.org/article/18121.htm
http://zhidao.baidu.com/question/31492511.html
参考这两个就会明白了.
Jerry-He 2008-05-12
  • 打赏
  • 举报
回复
你试一下修改成以下代码:
OutputStream out = response.getOutputStream();
DrawLine dl=new DrawLine();BufferedImage image =dl.drawReflexLine(20, 10, 0);
ImageIO.write(image, "JPEG", out);
out.flush();
out.close();
chjx1982 2008-05-12
  • 打赏
  • 举报
回复
没遇到过,帮你顶一下.
<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%! public static String code="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } %> My JSP 'image.jsp' starting page <% //设置页面不缓存 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); // 在内存中创建图象,设置图片的显示大小 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Times New Roman",Font.PLAIN,18)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for (int i=0;i<155;i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); } // 取随机产生的认证码(由数字和字母组长的) String sRand=""; for (int i=0;i<4;i++){ int rand=random.nextInt(62); sRand+=String.valueOf(code.charAt(rand)); // 将认证码显示到图象中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(String.valueOf(code.charAt(rand)),13*i+6,16); } // 将认证码存入SESSION session.setAttribute("rand",sRand); // 图象生效 g.dispose(); // 输出图象到页面 java.io.OutputStream os=response.getOutputStream(); ImageIO.write(image, "JPEG", os); os.flush(); os.close(); os=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); %>
基于SpringMVC annotation 的图形验证码 主要是controller的写法 实现前台验证码的显示 和刷新 验证功能相信大家都能写出来 访问 http://localhost:8080/SpringMVC_annotation_volidate/login jsp页面关键代码 function changeValidateCode(obj){ var timeNow = new Date().getTime(); obj.src="checkCode/service.do?time="+timeNow; } .. .. .. .. Controller package qianyan.mofi.controller; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/checkCode") public class CheckCodeController extends HttpServlet { public CheckCodeController() { super(); } public void destroy() { super.destroy(); } public void init() throws ServletException { super.init(); } public Color getRandColor(int s, int e) { Random random = new Random(); if (s > 255) s = 255; if (e > 255) e = 255; int r = s + random.nextInt(e - s); int g = s + random.nextInt(e - s); int b = s + random.nextInt(e - s); return new Color(r, g, b); } @RequestMapping("service.do") public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 禁止缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); // 指定生成的响应是图片 response.setContentType("image/jpeg"); int width = 200; int height = 60; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 创建BufferedImage类的对象 Graphics g = image.getGraphics(); // 创建Graphics类的对象 Graphics2D g2d = (Graphics2D) g; // 通过Graphics类的对象创建一个Graphics2D类的对象 Random random = new Random(); // 实例化一个Random对象 Font mFont = new Font("华文宋体", Font.BOLD, 30); // 通过Font构造字体 g.setColor(getRandColor(200, 250)); // 改变图形的当前颜色为随机生成的颜色 g.fillRect(0, 0, width, height); // 绘制一个填色矩形 // 画一条折线 BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); // 创建一个供画笔选择线条粗细的对象 g2d.setStroke(bs); // 改变线条的粗细 g.setColor(Color.DARK_GRAY); // 设置当前颜色为预定义颜色中的深灰色 int[] xPoints = new int[3]; int[] yPoints = new int[3]; for (int j = 0; j < 3; j++) { xPoints[j] = random.nextInt(width - 1); yPoints[j] = random.nextInt(height - 1); } g.drawPolyline(xPoints, yPoints, 3); // 生成并输出随机的验证文字 g.setFont(mFont); String sRand = ""; int itmp = 0; for (int i = 0; i 1.1f) scaleSize = 1f; trans.scale(scaleSize, scaleSize); g2d_word.setTransform(trans); /************************/ g.drawString(String.valueOf(ctmp), 30 * i + 40, 16); } // 将生成的验证码保存到Session中 HttpSession session = request.getSession(true); session.setAttribute("randCheckCode", sRand); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); } }

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧