Java基础进阶 验证码 待我称王封你为后i 2021-09-15 06:48 271阅读 0赞 **验证码生成** 说明:验证码是一张图片,而这个图片中的内容是使用代码生成的。 分析和步骤: 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")); } }
还没有评论,来说两句吧...