创建随机验证码

来源:互联网 发布:西施貂蝉网络表情 编辑:程序博客网 时间:2024/05/22 01:27
<pre name="code" class="java">package image;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.security.cert.Certificate;import java.util.Random;import javax.imageio.ImageIO;import org.hibernate.validator.constraints.Length;import org.junit.Test;public class VerrifyCode {private int w=70;private int h=35;private Random r = new Random();//设置字体private String[] fontNames= {"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};//可选字母private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";//背景色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 = r.nextInt(fontNames.length);String fontName = fontNames[index];// 生成随机的字体名称int style = r.nextInt(4);//生成随机样式 0(无样式),1(粗体),2(斜体),3(粗+斜体)int size = r.nextInt(5)+24;// 生成随机字号  24~28return 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(codes.length());return codes.charAt(index);}//创建BufferedImageprivate BufferedImage createImage(){BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D)image.getGraphics();g2.setColor(this.bgColor);g2.fillRect(0, 0, w, h);return image;}//调用这个方法获取验证码public BufferedImage getImage(){BufferedImage image = createImage();// 创建图片缓冲区Graphics2D g2 = (Graphics2D)image.getGraphics();//得到绘制环境StringBuilder sb = new StringBuilder();//用来装载生成的验证码文本//像图片中画4个字符for(int i=0;i<4;i++){//循环4次,每次生成一个字符String s = randomChar()+"";//随机生成一个字符sb.append(s);//把字符添加到sd中float x=i*1.0F*w/4;//设置当前坐标的x轴g2.setFont(randomFont());//设置随机字体g2.setColor(randomColor());//设置随机颜色g2.drawString(s, x, h-5);//画图}this.text=sb.toString();// 把生成的字符串给了this.textdrawLine(image);//添加干扰线return image;}// 返回验证码上的文字public String getText(){return text;}// 保存图片到指定的输出流public static void output (BufferedImage image,OutputStream out)throws IOException{ImageIO.write(image, "JPEG", out);}@Test//运行~public void fun() throws FileNotFoundException,IOException{VerrifyCode vc = new VerrifyCode();BufferedImage bi =vc.getImage();VerrifyCode.output(bi,new FileOutputStream("F:/xxx.jpg") );System.out.println(vc.getText());}}


                                             
0 0
原创粉丝点击