博客
关于我
web实现图形验证功能
阅读量:678 次
发布时间:2019-03-16

本文共 2950 字,大约阅读时间需要 9 分钟。

这里直接上工程文件源码:

ValidateImage.java:

package jpeg;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ValidateImage extends HttpServlet {		protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{	    response.setContentType("image/jpeg");	    createImage(response.getOutputStream());	    response.setHeader("Pragma","No-cache");	    response.setHeader("Cache-Control","no-cache");	    response.setDateHeader("Expires", 0);	}		private void createImage(OutputStream out)throws IOException	{		int width=60, height=20;		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);		Graphics g = image.getGraphics();		Random random = new Random();		g.setColor(getRandColor(200,250));		g.fillRect(0, 0, width, height);		g.setFont(new Font("Times New Roman",1,15));		//g.setColor(new Color());		//g.drawRect(0,0,width-1,height-1);		g.setColor(getRandColor(160,200));		for (int i=0;i<155;i++){			int x = random.nextInt(width);			int y = random.nextInt(height);		        int xl = random.nextInt(12);		        int yl = random.nextInt(12);			g.drawLine(x,y,x+xl,y+yl);		}		//String rand = request.getParameter("rand");		//rand = rand.substring(0,rand.indexOf("."));		String sRand="";		for (int i=0;i<4;i++){		    String rand=String.valueOf(random.nextInt(10));		    sRand+=rand;		    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));		    g.drawString(rand,13*i+6,16);		}              //session.setAttribute("rand",sRand);		g.dispose();		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);		JPEGEncodeParam param 	= encoder.getDefaultJPEGEncodeParam(image);		param.setQuality(1.0f, false);		encoder.setJPEGEncodeParam(param);		try{			encoder.encode(image);		}catch (IOException ioe){			ioe.printStackTrace();		}	}		Color getRandColor(int fc,int bc){        Random random = new Random();        if(fc>255) fc=255;        if(bc>255) bc=255;        int r=fc+random.nextInt(bc-fc);        int g=fc+random.nextInt(bc-fc);        int b=fc+random.nextInt(bc-fc);        return new Color(r,g,b);        }		}

TestImage.jsp:

     

web.xml:

This is the description of my J2EE component
This is the display name of my J2EE component
ValidateImage
jpeg.ValidateImage
ValidateImage
/validate
index.jsp

 

地址栏: 结果:

 

转载地址:http://vamqz.baihongyu.com/

你可能感兴趣的文章
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>
MySQL中B+Tree索引原理
查看>>
mysql中cast() 和convert()的用法讲解
查看>>
mysql中datetime与timestamp类型有什么区别
查看>>
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>
MySQL中group by 与 order by 一起使用排序问题
查看>>
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>