100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java captcha 验证码_验证码图片生成工具类——Captcha.java

java captcha 验证码_验证码图片生成工具类——Captcha.java

时间:2022-08-06 17:25:59

相关推荐

java captcha 验证码_验证码图片生成工具类——Captcha.java

验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面。

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

* 验证码图片生成工具

* 使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面。

*

*

* 作者: zhoubang

* 日期:8月7日 上午10:41:05

*/

public class Captcha {

public static final String RANDOMCODEKEY = "sess_captcha";// 放到session中的key

private Random random = new Random();

private String randString = "0123456789";// 随机产生的字符串

private int width = 80;// 图片宽

private int height = 26;// 图片高

private int lineSize = 40;// 干扰线数量

private int stringNum = 4;// 随机产生字符数量

/*

* 获得字体

*/

private Font getFont() {

return new Font("Fixedsys", Font.CENTER_BASELINE, 18);

}

/*

* 获得颜色

*/

private Color getRandColor(int fc, int bc) {

if (fc > 255)

fc = 255;

if (bc > 255)

bc = 255;

int r = fc + random.nextInt(bc - fc - 16);

int g = fc + random.nextInt(bc - fc - 14);

int b = fc + random.nextInt(bc - fc - 18);

return new Color(r, g, b);

}

/*

* 绘制字符串

*/

private String drowString(Graphics g, String randomString, int i) {

g.setFont(getFont());

g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121)));

String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));

randomString += rand;

g.translate(random.nextInt(3), random.nextInt(3));

g.drawString(rand, 13 * i, 16);

return randomString;

}

/*

* 绘制干扰线

*/

private void drowLine(Graphics g) {

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(13);

int yl = random.nextInt(15);

g.drawLine(x, y, x + xl, y + yl);

}

/*

* 获取随机的字符

*/

public String getRandomString(int num) {

return String.valueOf(randString.charAt(num));

}

/**

* 生成随机图片

*/

public void getRandcode(HttpServletRequest request, HttpServletResponse response) {

HttpSession session = request.getSession();

// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作

g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));

g.setColor(getRandColor(110, 133));

// 绘制干扰线

for (int i = 0; i <= lineSize; i++) {

drowLine(g);

}

// 绘制随机字符

String randomString = "";

for (int i = 1; i <= stringNum; i++) {

randomString = drowString(g, randomString, i);

}

session.removeAttribute(RANDOMCODEKEY);

session.setAttribute(RANDOMCODEKEY, randomString);

g.dispose();

try {

ImageIO.write(image, "JPEG", response.getOutputStream());// 将内存中的图片通过流动形式输出到客户端

} catch (Exception e) {

e.printStackTrace();

}

}

}

简单使用方法(可自行设计,此方法为servlet调用):

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(description = "图片验证码生成", urlPatterns = { "/ImageServlet" })

public class ImageServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public ImageServlet() {

super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("image/jpeg");// 设置相应类型,告诉浏览器输出的内容为图片

response.setHeader("Pragma", "No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expire", 0);

Captcha randomValidateCode = new Captcha();

try {

randomValidateCode.getRandcode(request, response);// 输出图片方法

} catch (Exception e) {

e.printStackTrace();

}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

文章转载地址:/zhoubang521/p/5200047.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。