神刀安全网

Java基础进阶 验证码

验证码生成
说明:验证码是一张图片,而这个图片中的内容是使用代码生成的。
分析和步骤:
1)创建一个可以存放图片的缓冲区BufferedImage作为画布;
2)通过画布获取到针对这个画布的画笔;
3)修改画布的背景颜色为白色;
4)设置画布的边框,画边框的时候需要注意下,如果这里写画布的宽width和高height ,就会超出画布就会看不见,所以width和height 分别-1;
5)创建一个获取随机数的对象;
6)给画布上写数据;
7)给画布上画干扰线;
8)需要把画布中的内容输出到指定位置;ImageIO.write(bi,”JPG”,new FileOutputStream(“E:/image.jpg”));

/*  * 验证码的生成:  * 验证码属于一张图片,这里面的内容都是代码画出来的。  */ public class CheckImage {     public static void main(String[] args) throws IOException {         //定义画布的宽和高         int width=120;         int height=40;         //创建一个可以存放图片的缓冲区,作为画布          //BufferedImage.TYPE_INT_RGB 表示生成图片的类型         BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);         //通过画布获取到针对这个画布的画笔         Graphics g = bi.getGraphics();         //修改画布的背景颜色  每次使用画笔的时候都得给画笔指定颜色         g.setColor(Color.WHITE);         //填充画布         g.fillRect(0, 0, width, height);         //设置画布的边框         //给画笔指定颜色         g.setColor(Color.RED);         //给画布画边框 如果这里写width height 就会超过画布,因为边框也会占一个像素,所以这里宽和高都需要-1         g.drawRect(0, 0, width-1, height-1);         //创建一个获取随机数的对象         Random r = new Random();         //给画布上画干扰线         //循环控制画多条线         for(int i=1;i<=10;i++)         {             //设置画笔的颜色             g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));             //向画布上画干扰线             //drawLine(x1, y1, x2, y2) 这里四个参数是因为两个点画成一条线             g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));         }         //定义数据准备向画布中写数据         String data="abcdefghigklmnpqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ123456789";         //循环控制画四个字符         for (int i = 1; i <=4; i++) {             //设置画笔的颜色 Color.BLUE这里的颜色固定了,只能是蓝色,我们可以让颜色随机变化 //          g.setColor(Color.BLUE);             g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));             //设置字体  Font.ITALIC表示斜体             g.setFont(new Font("宋体", Font.ITALIC, 20));             //给画布上写内容 20表示从x轴的位置开始书写 25表示y轴位置开始书写 //          g.drawString("哈哈哈哈", 20, 25);             /*              * data.charAt()表示根据函数的参数进行查找字符              * data.length()表示字符串的长度              * r.nextInt()表示生成随机数,但是随机数的范围在0~data字符串的长度              */             g.drawString(data.charAt(r.nextInt(data.length()))+"", 20*i, 25);         }         //给画布上画干扰线         //循环控制画多条线         /*for(int i=1;i<=100;i++)         {             //设置画笔的颜色             g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));             //向画布上画干扰线             //drawLine(x1, y1, x2, y2) 这里四个参数是因为两个点画成一条线             g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));         }*/         //将生成的验证码图片存储到指定位置         ImageIO.write(bi,"JPG",new FileOutputStream("E://image.jpg"));     } } 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Java基础进阶 验证码

分享到:更多 ()