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;
import javax.servlet.http.HttpSession;
public class RandomPicture extends HttpServlet {
public static final int WIDTH=120;
public static final int HEIGTH=35;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
//高速浏览器以图片形式打开
response.setContentType("image/jpeg");
BufferedImage image= new BufferedImage(WIDTH, HEIGTH, BufferedImage.TYPE_INT_RGB);
Graphics g= image.getGraphics();
//设置背景颜色
setBackground(g);
//设置边框
setBorder(g);
//设置背景颜色
drawRandomLine(g);
//设置背景字符Graphics2D 有旋转功能
String stand= drawRandomNum((Graphics2D) g);
HttpSession session= request.getSession();
session.setAttribute("stand", stand);
g.dispose();
//图形写给浏览器
ImageIO.write(image, "jpg", response.getOutputStream());
}
private String drawRandomNum(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
//生成字母数字
// for(int i=0;i<5;i++){
//
// String tem=GetRandomchar();
// srand+=tem;
// g.drawString(tem, 15*i+10, 15);
// }
//2、生成汉字:
StringBuffer sb = new StringBuffer();
String base="\u7684\u76e4\u7644\u7634\u7624\u7614\u7656\u5867";
int x=5;
for(int i =0;i<4;i++){
//设置旋转随机数,不大于正负30
int degree= new Random().nextInt()%30;//+-30
//设置旋转角度
g.rotate(degree*Math.PI/180,x,20);
String ch= base.charAt(new Random().nextInt(base.length()))+"";
sb.append(ch);
g.drawString(ch, x, 20);
//把旋转设回来
g.rotate(-degree*Math.PI/180,x,20);
x+=30;
}
return sb.toString();
}
//随机生成字符串
private String GetRandomchar() {
//1、生成字母数字
int rand =(int) Math.round(Math.random()*2);
int itmp=0;
char ctmp='\u0000';
switch(rand){
case 1:
itmp=(int) Math.round(Math.random()*25+65);
ctmp=(char)itmp;
return String.valueOf(ctmp);
case 2:
itmp=(int) Math.round(Math.random()*25+97);
ctmp=(char)itmp;
return String.valueOf(ctmp);
default:
itmp=(int) Math.round(Math.random()*9);
return String.valueOf(itmp);
}
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GREEN);
for(int i=0;i<5;i++){
int x1= new Random().nextInt(WIDTH);
int y1= new Random().nextInt(HEIGTH);
int x2= new Random().nextInt(WIDTH);
int y2= new Random().nextInt(HEIGTH);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH-2, HEIGTH-2);
}
private void setBackground(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGTH);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}