博客
关于我
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分组函数
查看>>
MySQL分组查询
查看>>
Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间
查看>>
mysql创建函数报错_mysql在创建存储函数时报错
查看>>
mysql加强(4)~多表查询:笛卡尔积、消除笛卡尔积操作(等值、非等值连接),内连接(隐式连接、显示连接)、外连接、自连接
查看>>
mysql加强(5)~DML 增删改操作和 DQL 查询操作
查看>>
mysql加强(6)~子查询简单介绍、子查询分类
查看>>
MySQL基础day07_mysql集群实例-MySQL 5.6
查看>>
Mysql基础命令 —— 数据库、数据表操作
查看>>
Mysql基础命令 —— 系统操作命令
查看>>
MySQL基础学习总结
查看>>
mysql基础教程三 —常见函数
查看>>
mysql基础教程二
查看>>
mysql基础教程四 --连接查询
查看>>
MySQL基础知识:创建MySQL数据库和表
查看>>
MySQL处理千万级数据分页查询的优化方案
查看>>
mysql备份
查看>>
mysql备份与恢复
查看>>
mysql备份工具xtrabackup
查看>>
MySQL外键约束
查看>>