您的位置:首页 > 其它

一个自制的Servlet生成图片验证码的示例

2018-03-07 19:00 246 查看
package com.maker.servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet(name = "VerificationCode")
public class VerificationCode extends HttpServlet {
private static int WIDTH=150;
private static int HEIGHT=50;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage bi=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics2D g=bi.createGraphics();
//1设置背景色
setBackground(g);
//2设置边框
setBorder(g);
//3设置干扰线
setLines(g);
//4设置文字
setFonts(g);
//5输出到浏览器
response.setContentType("image/jpeg");
//6控制浏览器不要缓存
ImageIO.write(bi,"jpg",response.getOutputStream());
response.setDateHeader("expries",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
}

private void setFonts(Graphics2D g) {
String upperLetters[]={"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 lowerLetters[]=new String[26];
for(int i1=0;i1<upperLetters.length;i1++){
lowerLetters[i1]=upperLetters[i1].toLowerCase();
}
String letters[]=new String[52];
for(int i2=0;i2<letters.length;i2++){
if(i2<26){
letters[i2]=upperLetters[i2];
}else{
letters[i2]=lowerLetters[i2-26];
}
}
int distanceX=10;
for(int i3=0;i3<4;i3++){
int degree=new Random().nextInt()%30;
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,30));
g.rotate(degree*Math.PI/180,distanceX,35);
g.drawString(letters[new Random().nextInt(52)],distanceX,35);
g.rotate(-degree*Math.PI/180,distanceX,35);
distanceX=distanceX+40;
}
}

private void setLines(Graphics g) {
g.setColor(Color.GREEN);
for(int i=0;i<5;i++){
g.drawLine(new Random().nextInt(WIDTH),new Random().nextInt(HEIGHT),new Random().nextInt(WIDTH),new Random().nextInt(HEIGHT));
}

}

private void setBorder(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(0,0,WIDTH-1,HEIGHT-1);
}

private void setBackground(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0,0,WIDTH,HEIGHT);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: