beautiful的验证码

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);


}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值