今天用wf框架写了个验证码 记录下来备用
public class ImageCreateController extends BaseController {
@Path("/imageCreater")
@GET
public ActionResult handleRequest() throws IOException{
HttpServletResponse response=beat().getResponse();
HttpServletRequest request=beat().getRequest();
HttpSession session=request.getSession();
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control","post-check=0, pre-check=0");
response.setHeader("Pragma","no-cache");
response.setContentType("image/jpeg");
BufferedImage bi=null;
String text=createText();
bi=createImage(text);
session.setAttribute("identifyCode", text);
ServletOutputStream out= response.getOutputStream();
ImageIO.write(bi,"jpg",out);
try {
out.flush();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
out.close();
}
return null;
}
public String createText(){
String text="";
for(int i=0;i<4;i++){
int t=(int) (Math.random()*10);
text+=t;
}
return text;
}
public BufferedImage createImage(String text){
int width = 100;
int height = 40;
BufferedImage image =new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics() ;
Font myFont = new Font("黑体" , Font.BOLD , 16) ;
g.setFont(myFont) ;
g.setColor(getRandomColor(200 , 250));
g.fillRect(0, 0, 100 , 40) ;
drawRandomLines(g, 160,100,40) ;
drawString(text, g) ;
return image;
}
public Color getRandomColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 200;
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);
}
public void drawRandomLines(Graphics2D g ,int nums,int width,int height){
Random random = new Random();
g.setColor(this.getRandomColor(160, 200)) ;
for(int i=0 ; i<nums ; i++){
int x1 = random.nextInt(width) ;
int y1 = random.nextInt(height);
int x2 = random.nextInt(12) ;
int y2 = random.nextInt(12) ;
g.drawLine(x1, y1, x2, y2) ;
}
}
public void drawString(String text,Graphics2D g){
Random random = new Random();
Color color = new Color(20+random.nextInt(20) , 20+random.nextInt(20) ,20+random.nextInt(20) );
g.setColor(color) ;
AffineTransform trans = new AffineTransform();
trans.rotate(random.nextInt(45)*3.14/180, 23, 7) ;
//缩放文字
float scaleSize = random.nextFloat() + 0.8f ;
if(scaleSize>1f)
scaleSize = 1f ;
trans.scale(scaleSize, scaleSize) ;
g.setTransform(trans) ;
g.drawString(text, 33, 14) ;
g.dispose();
}