java动态生成验证码图片

来源:互联网 发布:农村淘宝app苹果版下载 编辑:程序博客网 时间:2024/05/17 01:04

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

/** *  * @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的图片



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


0 0