博客
关于我
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/

你可能感兴趣的文章
Net任意String格式转换为DateTime类型
查看>>
net包之IPConn
查看>>
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net和T-sql中的日期函数操作
查看>>
Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
查看>>
Net操作Excel(终极方法NPOI)
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
net网络查看其参数state_dict,data,named_parameters
查看>>
Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载
查看>>
NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
查看>>
neuroph轻量级神经网络框架
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>
new Blob()实现不同类型的文件下载功能
查看>>
New Concept English three (35)
查看>>
NEW DATE()之参数传递
查看>>
New Journey--工作五年所思所感小记
查看>>
new Queue(REGISTER_DELAY_QUEUE, true, false, false, params)
查看>>
New Relic——手机应用app开发达人的福利立即就到啦!
查看>>
new work
查看>>
new 一个button 然后dispose,最后这个button是null吗???
查看>>