您的位置:首页 > 编程语言 > Java开发

Java生成图片验证码2

2015-07-24 14:01 459 查看
Photo类

package com.baowei.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

public class Photo {

private static final int width = 120;
private static final int height = 25;
private HttpServletResponse response;

private String randomData = "";

public Photo(HttpServletResponse response) {
this.response = response;
}

public void createImage() throws IOException {

// 1、在内存里面创建一个图片
BufferedImage bimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 2.1得到图片
Graphics g = bimage.getGraphics();
// 2.2设置图片的背景颜色
setBackground(g);
// 3、设置图片边框
setBorder(g);
// 4、设置图片干扰线
setLine(g);
// 5、向图片写数据
setRandomData(g);
// 6、将图片写给客户机
response.setContentType("image/jpeg");
ImageIO.write(bimage, "jpg", response.getOutputStream());
}

public void setBackground(Graphics g) {
Color color = g.getColor();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.setColor(color);

}

public void setBorder(Graphics g) {

Color color = g.getColor();
g.setColor(Color.BLUE);
g.drawRect(1, 1, width - 2, height - 2);
g.setColor(color);

}

public void setLine(Graphics g) {

for (int i = 0; i < 4; i++) {
// 此处获得到的x,y应该与上面的图片的宽高关联起来
int x1 = new Random().nextInt(width);
int x2 = new Random().nextInt(width);
int y1 = new Random().nextInt(height);
int y2 = new Random().nextInt(height);
Color color = g.getColor();
g.setColor(Color.GREEN);
g.drawLine(x1, y1, x2, y2);
g.setColor(color);
}

}

public void setRandomData(Graphics g) {

// 获取随机的数据
// String data = "";
for (int i = 0; i < 4; i++) {
randomData += new Random().nextInt(10) + " ";
}

// 设置数据的字体和颜色
Color color = g.getColor();
g.setColor(Color.RED);

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

g.drawString(randomData, 20, 20);

g.setColor(color);

}

public String getRandomData() {

String data[] = randomData.split(" ");
String returnData = "";
for (int i = 0; i < data.length; i++) {
returnData += data[i];
}

return returnData;
}

}


Demo01测试用的servlet

package com.baowei.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
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;
import javax.servlet.http.HttpSession;

import com.baowei.utils.Photo;

public class Demo01 extends HttpServlet {

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

doPost(request, response);

}

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

response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");

Photo pt = new Photo(response);
pt.createImage();
System.out.println(pt.getRandomData());
String data = pt.getRandomData();

// 存入会话session
//HttpSession session = request.getSession(true);
//session.setAttribute("data", data);
getServletContext().setAttribute("data", data);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: