//生成验证码
import java.awt.Color;
import java.awt.Font;
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 ImageCode extends HttpServlet {
Random ran = new Random();
int r,g,b;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=utf-8");
// 响应浏览器的是图片
response.setContentType("image/jpeg");
// 创建图片
int width = 130;
int height = 40;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_BGR);
// 得到图片的画笔
Graphics2D brush = image.createGraphics();
// 绘制图形 167,192,220
brush.setColor(Color.white); // 填充图形背景色
brush.fillRect(0, 0, width, height); // 填充的坐标
// 绘制边框
brush.setColor(Color.gray);
brush.drawRect(0, 0, width - 1, height - 1);
// 字符集
String msg = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz";
// 画笔的字体,样式和大小
Font f = new Font("楷体", Font.BOLD, 30);
brush.setFont(f);
int x = 15;
brush.setColor(Color.red);
for (int i = 0; i < 4; i++) {
randomColor();
Color c=new Color(r, g, b);
brush.setColor(c); // 随机产生画笔颜色
int index = ran.nextInt(msg.length()); // 在msg范围内产生下个随机数
char ch = msg.charAt(index); // 通过索引得到任意一个字符
String s = String.valueOf(ch); // 将字符转换成字符串
int rad = ran.nextInt(80); // 产生一个随机的度数
double ra = radian(rad); //把随机度数转换成弧度
brush.rotate(ra, x, 15); //根据弧度旋转图片
brush.drawString(s, x, 30); // 把字符串写入到图片中,y轴位置保持不变
brush.rotate(-ra, x, 15); //把图片旋转回原来的位置
x += 30; // x轴每次循环加30
}
//设置干扰线
for(int k=0;k<18;k++){
randomColor();
Color c=new Color(r, g, b);
brush.setColor(c); // 随机产生画笔颜色
int x1 = ran.nextInt(150);
int y1 = ran.nextInt(40);
int x2 = ran.nextInt(150);
int y2 = ran.nextInt(40);
brush.drawLine(x1, y1, x2, y2);
}
try {
ImageIO.write(image, "jpeg", response.getOutputStream());
} catch (IOException e) {
System.out.println(e);
}
}
//产生随机颜色
public void randomColor(){
this.r = ran.nextInt(255); // 0~255是RGB的取值范围
this.g = ran.nextInt(255);
this.b = ran.nextInt(255);
}
// 弧度=2*PI*角度/360
public double radian(int rad) {
double d = 2 * 3.14 * rad / 360;
return d;
}
}
java生成验证码
最新推荐文章于 2024-08-09 09:37:41 发布