文章来自个人博客git
以前作过一个练手的Web项目登录界面,其中有一个验证码模块,涉及到JavaIO和Java AWT工具因此打算写一篇介绍,顺便对练手项目的源码作一点小变更github
首先先定义几个须要的变量bash
private int width=50; //图片缓冲区的宽
private int height=15; //图片缓冲区的高
private Random random=new Random(); //随机数字
private Color color=new Color(255,255,255); //白色背景
private String text; //图片上的文本
复制代码
随机字符包括了10位数字和26个字母app
//生成随机字符
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);
}
复制代码
//画干扰线
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));
}
}
复制代码
//返回验证码图片中的文本
public String getText()
{
return text;
}
复制代码
//创造图片缓冲区
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;
}
复制代码
//使用输出流打印图片
public static void output(BufferedImage image, OutputStream out) throws IOException {
//做为JPEG格式输出图片
ImageIO.write(image,"JPG",out);
}
复制代码
直接输出图片到个人桌面dom
运行以后的结果:工具
就这样,简单的验证码就作完了ui