package com.itcast.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ValidatePhotoServlet extends HttpServlet {
private final int WIDTH = 100;
private final int HEIGHT = 30;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);// 获得一个图片对象
Graphics g = image.getGraphics();
// 设置背景色
setBackground(g);
// 设置边框
setBorder(g);
// 画干扰线
drawLine(g);
// 写随机数
drawrandom((Graphics2D) g);
// 画图
response.setContentType("image/jpeg");
ImageIO.write(image, "jpeg", response.getOutputStream());
response.setDateHeader("Expries", -1);// 设置没有缓存
response.setHeader("Cache_Control", "no_cache");
}
private void drawrandom(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));// 设置字体的格式
String base = "\u7684\u4e00\u4e80";// unicode码,用来生成汉字
int x = 5;
for (int i = 0; i < 5; i++) {
int degree = new Random().nextInt() % 30;// 这个是生成-30-30
String ch = (base.charAt(new Random().nextInt(base.length() - 1)) + "");// 随机获得汉字
g.rotate(degree * Math.PI / 180, x, 20);// degree * Math.PI /
// 180旋转的弧度 绕着这个点旋转 x, 20
g.drawString(ch, x, 20);// 把字写进去,Y不变,x每次加20
g.rotate(-degree * Math.PI / 180, x, 20);// 旋转回来,为下一个汉字旋转做准备
x = x + 20;
}
}
private void drawLine(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i < 5; i++) {
int x1 = new Random().nextInt(WIDTH);
int x2 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
}
private void setBackground(Graphics g) {
g.setColor(Color.WHITE);// 设置画笔的颜色
g.drawRect(0, 0, WIDTH, HEIGHT);// 设置用画笔划出的矩形
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
实现图片换一张的关键script代码
<input type="text" /><img src="/day_confirm/servlet/ValidatePhotoServlet" alt="换一张" onclick="changeimage(this)"/>