|
复制代码 代码如下: 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,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,20); g.rotate(-degree * Math.PI / 180,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,WIDTH,HEIGHT); } }
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|