本人不专攻图片方向 ,基本验证码都来自网络,摘抄如下
验证码图片生成Servle
t类,直接调用该Servlet
即可使用
取值的时候调用session.getAttribute("code")
得到生成的值
package com.servlet.rep;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@WebServlet("/SafeCodeImageServlet")
public class SafeCodeImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 设置所有可能出现的字符
static final char[] safeCode = {
'2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'
/*'1','l','0','O','o','#','@','$','%','&','(',')','|','/','*','^','!','~','\\'*/
};
//设置随机数
static Random random = new Random();
//使用随机数获取随机字符
static String getRandomCode(int n) {
String string = "" ;
for(int i =0 ; i < n ;i++) {
string = string + safeCode[random.nextInt(safeCode.length)];
}
return string;
}
//产生的随机颜色
static Color getRandomColor() {
return new Color(random.nextInt(255), random.nextInt(255),
random.nextInt(255), random.nextInt(255));
}
public SafeCodeImageServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg");
String randomCode = this.getRandomCode(6);
Color color = this.getRandomColor();
request.getSession(true).setAttribute("code", randomCode);
int width = 100 ;//验证码图片宽度
int height = 30 ;//验证码图片高度
//创建一个彩图(板)
BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//创建绘图对象(笔)
Graphics2D graphics2d = bImage.createGraphics();
// 设置字体类型,粗体,字号
graphics2d.setFont(new Font(Font.SANS_SERIF,Font.BOLD ,16));
// 设置白色背景颜色
graphics2d.setColor(new Color(255,255,255,255));
// 设置边界
graphics2d.fillRect(0, 0, width, height);
// 设置字体颜色
graphics2d.setColor(color);
// 将字符画出
graphics2d.drawString(randomCode, 18, 20);
// 设置100 个矩形噪点
for(int i =0 , n = random.nextInt(100) ;i <n;i++) {
graphics2d.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
}
// 将图片输出
ServletOutputStream outputStream = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(bImage);
outputStream.flush();
outputStream.close();
}
}