public void getYZM(HttpServletRequest request, HttpServletResponse response){
//验证码图片宽度
final int IMG_WIDTH = 116;
//验证码图片高度
final int IMG_HEIGHT = 36;
//验证码位数
final int CODE_LEN = 5;
// 验证码干扰线数
int lineCount = 20;
Random random = new Random();
//用于绘制图片,设置图片的长宽和图片类型
BufferedImage bi = new BufferedImage(IMG_WIDTH,IMG_HEIGHT,BufferedImage.TYPE_INT_RGB);
//获取绘图工具
Graphics graphics = bi.getGraphics();
//设置背景颜色
graphics.setColor(getRandColor(200, 250));
//填充矩形区域
graphics.fillRect(0,0,IMG_WIDTH,IMG_HEIGHT);
//设置字体
Font font = new Font("Fixedsys", Font.BOLD, 30);
graphics.setFont(font);
// 设置干扰线
for (int i = 0; i < lineCount; i++) {
int xs = random.nextInt(IMG_WIDTH);
int ys = random.nextInt(IMG_HEIGHT);
int xe = xs + random.nextInt(IMG_WIDTH);
int ye = ys + random.nextInt(IMG_HEIGHT);
graphics.setColor(getRandColor(1, 255));
graphics.drawLine(xs, ys, xe, ye);
}
// 添加噪点
float yawpRate = 0.01f;// 噪声率
int area = (int) (yawpRate * IMG_WIDTH * IMG_HEIGHT);
for (int i = 0; i < area; i++) {
int x = random.nextInt(IMG_WIDTH);
int y = random.nextInt(IMG_HEIGHT);
bi.setRGB(x, y, random.nextInt(255));
}
//验证码使用到的字符
char[] codeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456".toCharArray();
//存放生产的验证码
String captcha = "";
//循环绘制验证码
for(int i=0;i
int index = random.nextInt(codeChars.length);
//s随机生生成验证码颜色
graphics.setColor(getRandColor(1, 255));
//将字符绘制到图片
graphics.drawString(codeChars[index]+"",(i*20)+15,20);
captcha += codeChars[index];
}
//将生辰的验证码放入session
request.getSession().setAttribute("code",captcha);
//输出图片
try {
ImageIO.write(bi,"JPG",response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 产生随机字体
*/
private Font getFont(int size) {
Random random = new Random();
Font font[] = new Font[5];
font[0] = new Font("Ravie", Font.PLAIN, size);
font[1] = new Font("Antique Olive Compact", Font.PLAIN, size);
font[2] = new Font("Fixedsys", Font.PLAIN, size);
font[3] = new Font("Wide Latin", Font.PLAIN, size);
font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, size);
return font[random.nextInt(5)];
}
// 得到随机颜色
private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}