这篇文章转载自我的博客
正文之前
之前做过一个练手的Web项目登陆界面,其中有一个验证码模块,涉及到JavaIO和Java AWT工具所以打算写一篇介绍,顺便对练手项目的源码做一点小变动
正文
1. 变量
首先先定义几个需要的变量
private int width=50; //图片缓冲区的宽
private int height=15; //图片缓冲区的高
private Random random=new Random(); //随机数字
private Color color=new Color(255,255,255); //白色背景
private String text; //图片上的文本
2. 随机字符、颜色
随机字符包括了10位数字和26个字母
//生成随机字符
private char randomChar()
{
//选取随机数字,生成字符
String numbers = "1234567890qwertyuiopasdfghjklzxcvbnm";
int index=random.nextInt(numbers.length());
//转换为char类型
return numbers.charAt(index);
}
//生成随机颜色
private Color randomColor()
{
//以RGB形式表示颜色
int red=random.nextInt(255);
int green=random.nextInt(255);
int blue=random.nextInt(255);
//返回随机生成的颜色
return new Color(red,green,blue);
}
3. 干扰线
//画干扰线
private void drawLine(Graphics g){
for (int i = 0; i < 2; i++) {
//设置线的颜色
g.setColor(randomColor());
//线的长度从(x1,y1)到(x2,y2)
g.drawLine(random.nextInt(width), random.nextInt(height),
random.nextInt(width), random.nextInt(height));
}
}
4. 验证码中的文本
//返回验证码图片中的文本
public String getText()
{
return text;
}
5. 图片缓冲区
//创造图片缓冲区
private BufferedImage createImage()
{
//参数为宽度,高度和图像类型
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//设置颜色
g.setColor(color);
//填充内容
g.fillRect(0,0,width,height);
return image;
}
//得到图片缓冲区
public BufferedImage getImage()
{
BufferedImage image = createImage(); //创建缓冲区
Graphics g = image.getGraphics(); //得到绘制环境
StringBuilder stringBuilder = new StringBuilder(); //验证码文本
//验证码长度为4
for (int i=0;i<4;i++)
{
String str = String.valueOf(randomChar()); //产生随机字符,将char类型转为String类型
stringBuilder.append(str); //将生成的随机字符添加至stringBuilder
g.setColor(randomColor()); //产生随机颜色
g.drawString(str, i * width / 4, height); //绘制文本
}
drawLine(g); //添加干扰线
text = stringBuilder.toString(); //把生成字符串赋给文本,以便于验证
return image;
}
6. 输出图片
//使用输出流打印图片
public static void output(BufferedImage image, OutputStream out) throws IOException {
//作为JPEG格式输出图片
ImageIO.write(image,"JPG",out);
}
Demo
直接输出图片到我的桌面
运行之后的结果:
就这样,简单的验证码就做完了