package cn.servlet.request;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
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 Test2 extends HttpServlet {
private static final int WIDTH = 150;
private static final int HEIGHT = 60;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过BufferedImage构建一张图片。
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
//得到一幅图片
Graphics g = image.getGraphics();
//1.设置背景颜色
setColor(g,request);
//2.设置边框
setBorder(g);
//3.设置干扰线
setLine(g);
//4.设置随机数(再写到服务器的同时还要保存一份到session中,方便后面校验)
String damo = setRundom((Graphics2D)g);//只有Graphics2D上才旋转的方法,所以要进行强转
request.getSession().setAttribute("damo", damo);
//5.写到浏览器
response.setContentType("image/jpeg"); //以图片方式打开
//控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
}
private String setRundom(Graphics2D g) {
Random random = new Random();
Color[] color = { Color.black, Color.blue, Color.cyan, Color.DARK_GRAY,
Color.gray, Color.green, Color.lightGray, Color.magenta,
Color.orange, Color.pink, Color.red,Color.yellow,Color.white };
g.setFont(new Font("宋体",Font.BOLD,30));
//字符串的组装
StringBuffer sb = new StringBuffer();
//设置汉字的取值范围
String str = "0123456789abcdefghijklmn呵呵";
// String str = "[\u4e00-\u9fa5]+"; 汉字区间
int x = 10;
Random r = new Random();
for(int i=0;i<4;i++){
//获取一个随机旋转度数
int d = new Random().nextInt()%30;
//获取一个随机字
String c = str.charAt(r.nextInt(str.length()))+"";
g.setColor(color[random.nextInt(color.length)]);
//向stringBuffer里存人
sb.append(c);
//将字体进行旋转,d*Math.PI/180度,x,20分别代表x,y坐标
g.rotate(d*Math.PI/180, x, 20);
//将这个随机数写出去,x宽,20高
g.drawString(c, x, 40);
//旋转完之后再将字转回去,这样就不会影响下一个字
g.rotate(-d*Math.PI/180, x, 40);
x+=30;
}
//返回一个StringBuffer,里面存的就是那四个随机数
return sb.toString();
}
private void setLine(Graphics g) {
g.setColor(Color.PINK);
//规定干扰线的起始坐标和结束坐标,必须小于图片大小
//nextInt:返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int值。
for(int i=0;i<6;i++){
//线条的起始位置
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
//线条的结束位置
int x2 = new Random().nextInt(WIDTH);
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 setColor(Graphics g,HttpServletRequest request) throws IOException {
//背景图片
String path = request.getRealPath("/images/fmv.jpg");
Image image = ImageIO.read(new File(path));
g.drawImage(image, 0, 0, WIDTH, HEIGHT, null);
//背景颜色
// g.setColor(Color.WHITE);
// //fillRect(int x, int y, int width, int height)填充指定的矩形。
// g.fillRect(0, 0, WIDTH, HEIGHT);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
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 Test2 extends HttpServlet {
private static final int WIDTH = 150;
private static final int HEIGHT = 60;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过BufferedImage构建一张图片。
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
//得到一幅图片
Graphics g = image.getGraphics();
//1.设置背景颜色
setColor(g,request);
//2.设置边框
setBorder(g);
//3.设置干扰线
setLine(g);
//4.设置随机数(再写到服务器的同时还要保存一份到session中,方便后面校验)
String damo = setRundom((Graphics2D)g);//只有Graphics2D上才旋转的方法,所以要进行强转
request.getSession().setAttribute("damo", damo);
//5.写到浏览器
response.setContentType("image/jpeg"); //以图片方式打开
//控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
}
private String setRundom(Graphics2D g) {
Random random = new Random();
Color[] color = { Color.black, Color.blue, Color.cyan, Color.DARK_GRAY,
Color.gray, Color.green, Color.lightGray, Color.magenta,
Color.orange, Color.pink, Color.red,Color.yellow,Color.white };
g.setFont(new Font("宋体",Font.BOLD,30));
//字符串的组装
StringBuffer sb = new StringBuffer();
//设置汉字的取值范围
String str = "0123456789abcdefghijklmn呵呵";
// String str = "[\u4e00-\u9fa5]+"; 汉字区间
int x = 10;
Random r = new Random();
for(int i=0;i<4;i++){
//获取一个随机旋转度数
int d = new Random().nextInt()%30;
//获取一个随机字
String c = str.charAt(r.nextInt(str.length()))+"";
g.setColor(color[random.nextInt(color.length)]);
//向stringBuffer里存人
sb.append(c);
//将字体进行旋转,d*Math.PI/180度,x,20分别代表x,y坐标
g.rotate(d*Math.PI/180, x, 20);
//将这个随机数写出去,x宽,20高
g.drawString(c, x, 40);
//旋转完之后再将字转回去,这样就不会影响下一个字
g.rotate(-d*Math.PI/180, x, 40);
x+=30;
}
//返回一个StringBuffer,里面存的就是那四个随机数
return sb.toString();
}
private void setLine(Graphics g) {
g.setColor(Color.PINK);
//规定干扰线的起始坐标和结束坐标,必须小于图片大小
//nextInt:返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int值。
for(int i=0;i<6;i++){
//线条的起始位置
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
//线条的结束位置
int x2 = new Random().nextInt(WIDTH);
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 setColor(Graphics g,HttpServletRequest request) throws IOException {
//背景图片
String path = request.getRealPath("/images/fmv.jpg");
Image image = ImageIO.read(new File(path));
g.drawImage(image, 0, 0, WIDTH, HEIGHT, null);
//背景颜色
// g.setColor(Color.WHITE);
// //fillRect(int x, int y, int width, int height)填充指定的矩形。
// g.fillRect(0, 0, WIDTH, HEIGHT);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}