wangflood

精心维护一个技术blog,为了工作,也是爱好。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 19 Stories :: 8 Comments :: 0 Trackbacks
        最近在做一个面试题,断断续续地忙了九天。终于赶在圣诞节前,这个美好的晚上完成。不仅把SSH架构复习一遍,displaytag也应用上了。
完成这个项目,产生了几个衍生品。其中验证码就是其中一个。

一般大登录和注册页面上存在验证,以前觉得很神秘。可能是接触得多,高度就高了,再看验证码,其实就是response一个contentType="image/jpeg"类型的html而已。
下面是我和awt方式生成这张图片的源码:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class Test extends Frame {

    
public Test() {

        Button b 
= new Button("下一个");

        setBounds(
300300400400);
        
this.addWindowListener(new WindowAdapter() {
            @Override
            
public void windowClosing(WindowEvent e) {
                System.exit(
0);
            }

        }
);
        b.addActionListener(
new ActionListener() {

            @Override
            
public void actionPerformed(ActionEvent e) {
                repaint();

            }

        }
);
        repaint();
        
this.setLayout(new BorderLayout());
        
this.add(b, BorderLayout.SOUTH);
        
this.setVisible(true);
    }


    @Override
    
public void paint(Graphics headG) {
        
int width = 400, height = 400;
        BufferedImage image 
= new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics g 
= image.getGraphics();
        Random random 
= new Random();
        g.setColor(getRandColor(
200250));
        g.fillRect(
00, width, height);
        g.setFont(
new Font("Arial", Font.BOLD, 120));
        g.setColor(getRandColor(
160200));

        
for (int i = 0; i < 550; 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++{
            String rand 
= String.valueOf(random.nextInt(10));
            sRand 
+= rand;
            g.setColor(
new Color(000));
            g.drawString(rand, 
110 * i + 3250);
        }


        headG.drawImage(image, 
00this);
    }


    
public static void main(String[] args) {

        
new Test();

    }


    
static 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);
    }


}


运行情况(截图):

posted on 2010-12-25 23:10 wangflood 阅读(158) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: