一:需求分析
使用java生成验证码:
1:生成画布,画好背景图
2:画随机数
3:画干扰线
4:将内存中的图片保存到硬盘上
二:代码如下
1 /** 2 * 3 */ 4 package com.hlcui.io; 5 6 import java.awt.Color; 7 import java.awt.Font; 8 import java.awt.Graphics; 9 import java.awt.image.BufferedImage; 10 import java.io.File; 11 import java.io.IOException; 12 import java.util.Random; 13 14 import javax.imageio.ImageIO; 15 16 /** 17 * @author Administrator 生成验证码 18 */ 19 public class ValidateCode { 20 // 定义画布的宽和高 21 public static final int WIDTH = 300; 22 public static final int HEIGHT = 150; 23 public static BufferedImage bi; 24 public static Graphics g; 25 public static Random r = new Random(); 26 27 // 生成min到max之间的随机数 28 private static int r(int min, int max) { 29 int num = r.nextInt(max - min) + min; 30 return num; 31 } 32 33 // 画背景图 34 public static void generateBg() { 35 bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 36 g = bi.getGraphics(); 37 g.setColor(new Color(r(0, 255), r(0, 255), r(0, 255))); // 设置画布的背景色 38 g.fillRect(0, 0, WIDTH, HEIGHT); // 填充 39 } 40 41 // 画随机数 42 public static void generateNum() { 43 String words = "abcdefghijklmnopqrstuvwxyz0123456789"; 44 for (int i = 0; i < 4; i++) { 45 g.setColor(new Color(r(0, 255), r(0, 255), r(0, 255))); 46 g.setFont(new Font("微软雅黑", Font.PLAIN, 70)); 47 char c = words.charAt(r(0, words.length())); 48 g.drawString(String.valueOf(c), 40 + i * 60, r(40, HEIGHT - 40)); 49 } 50 } 51 52 // 画干扰线 53 public static void generateLine() { 54 for (int i = 0; i < 25; i++) { 55 g.setColor(new Color(r(0, 255), r(0, 255), r(0, 255))); 56 g.drawLine(r(0, WIDTH), r(0, HEIGHT), r(0, WIDTH), r(0, HEIGHT)); 57 } 58 } 59 60 // 将图片从内存输出到硬盘 61 public static void save() throws IOException { 62 File file = new File("f:/1.png"); 63 ImageIO.write(bi, "png", file); 64 System.out.println("保存完成!"); 65 } 66 67 // 测试 68 public static void main(String[] args) throws IOException { 69 generateBg(); 70 generateNum(); 71 generateLine(); 72 save(); 73 } 74 }
三:生成验证码图片
以上代码均已经验证!