java动态生成验证码图片

实现动态生成验证码图片.代码如下:

/**
 * 
 * @author KingDom
 * 动态生成验证码图片
 */
public class  VerifyCode  
{  
      private int w=70;  
      private int h=35;  
      private Random r= new Random();  
  
      private String[] fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};  
      private String codes="012345678901234567890123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";  
      private Color bgColor = new Color(255,255,255);  
      private String text;  
  
      private Color randomColor(){  
          int red = r.nextInt(150);  
          int green = r.nextInt(150);  
          int blue = r.nextInt(150);  
          return new Color(red,green,blue);  
      }  
  
      private Font randomFont(){  
          int index = this.r.nextInt(fontNames.length);  
          String fontName = fontNames[index];  
          int style = this.r.nextInt(4);  
          int size = this.r.nextInt(5) + 24;  
            return new Font(fontName, style, size);  
      }  
  
    private void drawLine (BufferedImage image){  
          int num = 3;  
          Graphics2D g2=(Graphics2D)image.getGraphics();  
          for(int i=0;i<num;i++){  
             int x1=r.nextInt(w);  
             int y1=r.nextInt(h);  
             int x2=r.nextInt(w);  
             int y2=r.nextInt(h);  
             g2.setStroke(new BasicStroke(1.5F));  
             g2.setColor(Color.BLUE);  
             g2.drawLine(x1,y1,x2,y2);  
          }  
        
      }  
  
      private char randomChar(){  
          int index=r.nextInt(this.codes.length());  
          return this.codes.charAt(index);  
      }  
  
      private BufferedImage createImage(){  
         BufferedImage image=new BufferedImage(this.w,this.h,BufferedImage.TYPE_INT_RGB);//BufferedImage.TYPE_INT_RGB  
         Graphics2D g2 = (Graphics2D)image.getGraphics();  
         g2.setColor(this.bgColor);  
         g2.fillRect(0,0,this.w,this.h);  
         return image;  
      }  
  
      public BufferedImage getImage(){  
         BufferedImage image=createImage();  
         Graphics2D g2=(Graphics2D)image.getGraphics();  
         StringBuilder sb = new StringBuilder();  
         for(int i =0;i<4;i++){  
            String s= randomChar()+"";  
            sb.append(s);  
            float x= i*1.0F*this.w/4.0F;  
            g2.setFont(randomFont());  
            g2.setColor(randomColor());  
            g2.drawString(s,x,this.h-5);  
         }  
         this.text=sb.toString();  
         drawLine(image);//添加干扰线  
         return image;  
      }  
        //返回验证码上的文本  
      public String getText(){  
          return this.text;  
         
      }  
      //保存图片到指定的输出流  
      public static void output(BufferedImage image,OutputStream out)  
          throws IOException{  
            ImageIO.write(image,"JPEG",out);  
        
      }  
  
}  

测试类:

/**
 * 
 * @author KingDom
 * 动态生成图片测试
 */
public class Demo  
{  
	 @Test  
	 public void test() throws FileNotFoundException, IOException{  
	    VerifyCode vc=new VerifyCode();  
	    BufferedImage bi = vc.getImage();  
	    VerifyCode.output(bi,new FileOutputStream("E:/xxx.jpg"));  
	   
	    System.out.println("图片中的验证是:"+vc.getText());  
	 }  
}  


运行结果:

在系统的E盘中生成了一张xxx.jpg的图片



在控制台中输出了该图片中的验证码:


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值