impor java.awt.Color;
impor java.awt.Font;
impor java.awt.Grafik;
impor java.awt.Graphics2D;
impor java.awt.image.BufferedImage;
impor java.io.IOException;
import java.util.Acak;
impor javax.imageio.ImageIO;
impor javax.servlet.ServletException;
impor javax.servlet.http.HttpServlet;
impor javax.servlet.http.HttpServletRequest;
impor javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
validasi kelas publikPicture memperluas HttpServlet {
public void doGet (permintaan HttpServletRequest, respons HttpServletResponse)
melempar ServletException, IOException {
mencoba {
validasi gambar (permintaan, tanggapan);
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
}
public void doPost (permintaan HttpServletRequest, respons HttpServletResponse)
melempar ServletException, IOException {
doGet(permintaan, tanggapan);
}
int akhir public static WIDTH = 120;
int akhir statis publik TINGGI = 25;
public void validasiimage (permintaan HttpServletRequest,
Respons HttpServletResponse) memunculkan Pengecualian {
BufferedImage bi = BufferedImage baru(LEBAR, TINGGI,
BufferedImage.TYPE_INT_RGB);// 在内存中构建一幅图象
Grafik g = bi.getGraphics();
setBackGround(g);// 设置背景色
setBorder(g);// 设置边框
drawRandomLine(g);// 画干扰线
String acak = drawRandomNum((Graphics2D) g);// 写随机数
request.getSession().setAttribute("acak", acak);
//request.getSession(salah);
respon.setContentType("gambar/jpeg");
// 设置不要缓存
respon.setDateHeader("berakhir", -1);
respon.setHeader("Kontrol Cache", "tanpa cache");
ImageIO.write(bi, "jpg", respon.getOutputStream());
}
pribadi String drawRandomNum(Graphics2D g) {
g.setColor(Warna.MERAH);
g.setFont(Font baru("宋体", Font.BOLD, 20));
// [/u4e00-/u9fa5]中文数字区间
Basis string = "/u4e00/u4f00/u5e00/u4e50/u4e89/u4f10/u4e09";
StringBuffer sb = StringBuffer baru();
ke dalam x = 5;
untuk (int saya = 0; saya < 4; saya++) {
int derajat = new Random().nextInt() % 30;
String ch = base.charAt(new Random().nextInt(base.length())) + "";
sb.tambahkan(ch);
g.rotate(derajat * Math.PI / 180, x, 20);
g.drawString(ch,x,20);
g.rotate(-derajat * Math.PI / 180, x, 20);
x = x + 30;
}
Sistem.keluar.println(sb.toString());
kembali sb.toString();
}
private void drawRandomLine(Grafik g) {
g.setColor(Warna.HIJAU);
untuk (int saya = 0; saya < 3; saya++) {
int x1 = baru Acak().nextInt(LEBAR);
int y1 = baru Acak().nextInt(TINGGI);
int x2 = baru Acak().nextInt(LEBAR);
int y2 = baru Acak().nextInt(TINGGI);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Grafik g) {
g.setColor(Warna.BIRU);
g.drawRect(1, 1, LEBAR - 2, TINGGI - 2);
}
private void setBackGround(Grafik g) {
g.setColor(Warna.PUTIH);
g.fillRect(0, 0, LEBAR, TINGGI);
}
}