详细讲解步骤
1.生成随机验证码random
2.准备画布 缓存图片 BufferedImage() img=new BufferedImage(width,height,类型);
3.准备画笔 Graphisc g=img.getGraphsic();//画笔是画布中获取到的
4.画一个矩形用来装验证码 g.fillRact(00,0,宽,高);//前面两个0是矩形在画布上的坐标
5.画干扰线 g.drawLine()
6.画验证码 设置画笔(每画一次改变一次画笔颜色)颜色,文字字体
一个一个画验证码 for g.drawString(""+code.charAt(i),x,y)//因为是画字符串所以加“”变成字符串,后面的x,y是坐标
7.准备流将画布展示 以流的形式输出
FileOutPutStream fop=new FileOutPutStream(“code.png”);//抛异常是因为这个图片
ImgeIO.write(img,“png”,fop)//画布 图片类型 流类型
PS(如果是前端就用response.getOutPutStream())
最后将文件流关闭
完整代码:
package yanzhengma;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Random;
public class Test {
public static void main(String[] args) throws Exception {
//验证码范围
char[] cs={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z'};
String code="";
Random r=new Random();
//四位随机验证码
for (int i = 0; i < 4; i++) {
//从数组中随机索引
code+=cs[r.nextInt(cs.length)];
}
System.out.println(code);
//开始画图
//设置宽高
int width=100;
int height=50;
//定义画布 准备画笔 宽高 图片类型 BufferedImage.TYPE_INT_RGB
BufferedImage img=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=img.getGraphics();
//设置颜色 color.decode() 十六进制颜色码
g.setColor(Color.decode("#cccccc"));
//画背景 填充一个矩形 从0,0开始填满
g.fillRect(0,0,width,height);
//画干扰线
g.setColor(Color.GRAY);
//循环划线
for (int i = 0; i < 8; i++) {
g.drawLine(r.nextInt(width),
r.nextInt(height),
r.nextInt(width),
r.nextInt(height)
);
}
//画文字
//设置画验证码颜色 和字体
g.setColor(Color.BLACK);
//设置字体 样式 加粗|斜体 大小
g.setFont(new Font("Arial",Font.BOLD|Font.ITALIC,20));
//g.drawString(code,20,30);
//一个一个画
for (int i = 0; i < code.length(); i++) {
g.drawString(""+code.charAt(i),20*i+8,30);
}
//把图片给输出流
//前端用response.getoutputStream()
//用文件写 一个输出流
FileOutputStream fos=new FileOutputStream("code.png");
//保存一个文件 通过图像io对象向输出流中输出
ImageIO.write(img,"png",fos);
fos.close();
}
}