画验证码

jsp中验证码的更新:

  way:<img src="/login_zhuce/CheckCode" onclick="this.src=this.src+'?'+new Date().getTime()" title="换一张" style="cursor:pointer">

  

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
  response.setCharacterEncoding("UTF-8");
  response.setContentType("text/html");
  BufferedImage b=new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
 

Graphics g=b.getGraphics();
        
        //1.设置背景色
        drawBackGound(g);
        
        //画边框
        drawBorder(g);
        
        //画干干扰线
        drawLine(g);
        
        //画产生随机数
        String checkCode=drawRandomNumber((Graphics2D)g);
        request.getSession().setAttribute("checkCode", checkCode);
        
        //图像写给浏览器
        response.setContentType("image/jpeg");
        //静止缓存这张图片,不是再进这个网站是无法获得新的图片
        //图片动态变化不要缓存
        response.setDateHeader("expires",-1);
        response.setHeader("Pragma","no-cache");
        response.setHeader("Cache-control","no-cache");
        ImageIO.write(b,"jpg",response.getOutputStream());
    }
    
    private String drawRandomNumber(Graphics2D g){
        String str="";
        g.setColor(Color.RED);
        g.setFont(new Font("宋体",Font.BOLD,15));
        Random random=new Random();
        int x=10;
        for(int i=0;i<4;i++){
            String number=random.nextInt(10)+"";
            str+=number;
            int degree=random.nextInt()%60;
            g.rotate(degree*Math.PI/180,x,HEIGHT-5);
            //g.(degree/180 * Math.PI);
            g.drawString(number,x,20);
            g.rotate(-degree*Math.PI/180,x,HEIGHT-5);
            x+=30;
        }
        return str;
    
    }

    private void drawLine(Graphics g) {
        g.setColor(Color.BLUE);
        String []color={"RED","GREEN","YELLOW","BLUE"};
        Random random=new Random();
        for(int i=0;i<4;i++){
            
            int x1=random.nextInt(WIDTH);
            int y1=random.nextInt(HEIGHT);
            int x2=random.nextInt(WIDTH);
            int y2=random.nextInt(HEIGHT);
            g.drawLine(x1, y1, x2, y2);
        }
        
    }

    private void drawBorder(Graphics g) {
        g.setColor(Color.BLACK);
        g.drawRect(1, 1,WIDTH-2, HEIGHT-2);
        
    }




    private void drawBackGound(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0,0 , WIDTH, HEIGHT);
        
        
    }

 

posted @ 2016-04-26 21:03  戒。  阅读(96)  评论(0编辑  收藏  举报