关于java 图形验证码的解决方法
关于java 图形验证码的解决方法
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:packagecn.response;importjava.awt.Color;importjava.awt.Font;i...

复制代码 代码如下:

package cn.response;

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;

@SuppressWarnings("serial")

public class validatePicture extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

try {

validateimage(request, response);

} catch (Exception e) {

e.printStackTrace();

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public static final int WIDTH = 120;

public static final int HEIGHT = 25;

public void validateimage(HttpServletRequest request,

HttpServletResponse response) throws Exception {

BufferedImage bi = new BufferedImage(WIDTH, HEIGHT,

BufferedImage.TYPE_INT_RGB);// 在内存中构建一幅图象

Graphics g = bi.getGraphics();

setBackGround(g);// 设置背景色

setBorder(g);// 设置边框

drawRandomLine(g);// 画干扰线

String random = drawRandomNum((Graphics2D) g);// 写随机数

request.getSession().setAttribute("random", random);

//request.getSession(false);

response.setContentType("image/jpeg");

// 设置不要缓存

response.setDateHeader("expries", -1);

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

ImageIO.write(bi, "jpg", response.getOutputStream());

}

private String drawRandomNum(Graphics2D g) {

g.setColor(Color.RED);

g.setFont(new Font("宋体", Font.BOLD, 20));

// [u4e00-u9fa5]中文数字区间

String base = "u4e00u4f00u5e00u4e50u4e89u4f10u4e09";

StringBuffer sb = new StringBuffer();

int x = 5;

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

int degree = new Random().nextInt() % 30;

String ch = base.charAt(new Random().nextInt(base.length())) + "";

sb.append(ch);

g.rotate(degree * Math.PI / 180, x, 20);

g.drawString(ch, x, 20);

g.rotate(-degree * Math.PI / 180, x, 20);

x = x + 30;

}

System.out.println(sb.toString());

return sb.toString();

}

private void drawRandomLine(Graphics g) {

g.setColor(Color.GREEN);

for (int i = 0; i < 3; 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 setBackGround(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(0, 0, WIDTH, HEIGHT);

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类