импортировать java.awt.Color;
импортировать java.awt.Font;
импортировать java.awt.Graphics;
импортировать java.awt.Graphics2D;
импортировать java.awt.image.BufferedImage;
импортировать java.io.IOException;
импортировать java.util.Random;
импортировать javax.imageio.ImageIO;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServlet;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
@SuppressWarnings("последовательный")
общественный класс validatePicture расширяет HttpServlet {
public void doGet (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
пытаться {
validateimage (запрос, ответ);
} catch (Исключение е) {
е.printStackTrace();
}
}
public void doPost (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
doGet (запрос, ответ);
}
общедоступный статический окончательный int WIDTH = 120;
public static Final int HEIGHT = 25;
public void validateimage (запрос HttpServletRequest,
Ответ HttpServletResponse) выдает исключение {
BufferedImage bi = новый BufferedImage(ШИРИНА, ВЫСОТА,
BufferedImage.TYPE_INT_RGB);// 在内存中构建一幅图象
Графика g = bi.getGraphics();
setBackGround(g);// 设置背景色
setBorder(g);// 设置边框
drawRandomLine(g);// 画干扰线
String random = drawRandomNum((Graphics2D) g);// 写随机数
request.getSession().setAttribute("случайный", случайный);
//request.getSession(ложь);
response.setContentType("изображение/jpeg");
// 设置不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
ImageIO.write(bi, "jpg", response.getOutputStream());
}
частная строка drawRandomNum (Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
// [/u4e00-/u9fa5]中文数字区间
База строки = "/u4e00/u4f00/u5e00/u4e50/u4e89/u4f10/u4e09";
StringBuffer sb = новый StringBuffer();
интервал х = 5;
для (int я = 0; я <4; я++) {
int степень = новый Random().nextInt() % 30;
Строка ch = base.charAt(new Random().nextInt(base.length())) + "";
sb.append(ч);
g.rotate(степень * Math.PI/180, x, 20);
g.drawString(ch, x, 20);
g.rotate(-степень * Math.PI / 180, x, 20);
х = х + 30;
}
System.out.println(sb.toString());
вернуть sb.toString();
}
частная пустота drawRandomLine (Графика г) {
g.setColor(Цвет.ЗЕЛЕНЫЙ);
для (int я = 0; я <3; я++) {
int x1 = новый Random().nextInt(ШИРИНА);
int y1 = новый Random().nextInt(HEIGHT);
int x2 = новый Random().nextInt(ШИРИНА);
int y2 = новый Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
частный недействительный setBorder (Графика г) {
g.setColor(Цвет.СИНИЙ);
g.drawRect(1, 1, ШИРИНА - 2, ВЫСОТА - 2);
}
частный недействительный setBackGround (Графика г) {
g.setColor(Цвет.БЕЛЫЙ);
g.fillRect(0, 0, ШИРИНА, ВЫСОТА);
}
}