java图片验证码

来源:互联网 发布:单片机模块化编程教程 编辑:程序博客网 时间:2024/06/06 04:03
public class RandomNumUtil {    private ByteArrayInputStream image;//图像    private String str;//验证码   private RandomNumUtil(){    init();//自定义方法 初始化属性    }    //取得RandomNumUtil实例       public static RandomNumUtil Instance(){    return new RandomNumUtil();  // 自定义方法 实例化}        // 取得验证码图片      public ByteArrayInputStream getImage(){    return this.image;    }       // 取得图片的验证码        public String getString(){    return this.str;    }    private void init() {    // 在内存中创建图象    int width=87, height=30;    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,27));    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到    g.setColor(getRandColor(160,200));    for (int i=0;i<80;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);    }    // 取随机产生的认证码(6位数字) String[] chr1 = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; String[] chr={"0","1","2","3","4","5","6","7","8","9"};StringBuffer sb=new StringBuffer(); for (int i=0;i<4;i++){      String c=chr[random.nextInt(10)];// 将认证码显示到图象中    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));    // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成    g.drawString(c,15*i+10,22);sb.append(c);}    //赋值验证码    this.str=sb.toString();    //图象生效    g.dispose();    ByteArrayInputStream input=null;    ByteArrayOutputStream output = new ByteArrayOutputStream();    try{    ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);    ImageIO.write(image, "JPEG", imageOut);    imageOut.close();    input = new ByteArrayInputStream(output.toByteArray());    }catch(Exception e){    }    this.image=input;// 赋值图像   }    // 给定范围获得随机颜色       private 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);    }    }  

原创粉丝点击