实现Web验证码图片-原理
2012-11-16 22:07
393 查看
[b]实现验证码的基础[/b]
GDI+graphicsdeviceinterfaceplus的缩写,即图形设备接口。GDI+为开发者提供了一组实现与各种设备(具有图形化能力但不涉及图形细节的设备)进行交互的库函数。C#通过Bitmap类创建位图对象、Grephics类创建画板对象,再通过Pen类、Brush类、Color类等画位图:
Point结构在二维平面中定义点坐标的有序对。常用于定义窗体或控件位置、其他图形(线条/矩形等)边界。
创建:Pointp=newPoint(30,90);
IsEmpty属性检测Point结构是否为空。
Size结构存储有序整数对。常用于定义窗体、空间呵其他矩形区域的大小。
第一个构造函数接受一个Point结构:Pointp=newPoint(30,90);
Sizes=newSize(p);
第二个构造函数接受二个int值:Sizes=newSize(30,90);
主要属性:Whdtn、hight、isEmpty
Rectangle结构存储四个整数(表矩形位置和大小)。由一个定义左上角的Point结构和一个定义大小的Size结构组成。
主要属性:Location左上角坐标、Size矩形大小、Height/Width矩形高宽、Left/Right左右边x坐标、Top/Bottom上下边y坐标、isEmpty
[b]实现验证码主要语法:[/b]
//位图对象Bitmapbmp=newBitmap(120,32);
//画板对象Graphicsgp=Graphics.FromImage(bmp);
//画板背景色gp.Clear(Color.Silver);默认为black
//起点对象Pointp1=newPoint(0,4);
//画笔对象Penp=newPen(Color.Red);
//画刷颜色Brushs=Brushes.Red;
//文字对象stringcode="";
//文字保存到会话中Session["checkcode"]=code;
//画板绘制文字gp.DrawString(code,newFont("楷体",14),s,p1);(内容,字体,颜色,起点坐标)
//位图输出到页面bmp.Save(Response.OutputStream,ImageFormat.Gif);
开始验证码的实现:
一、创建一个一般应用程序(yzm.ashx)
二、创建一个验证页面,调试!
补充1:
如何实现点击图片刷新验证码?可添加onclick事件重新加载图片源:src=“”
注:添加onclick="this.src='YZM.ashx'"图片是不会刷新,需不同的URL地址。
可以添加onclick="this.src='YZM.ashx?a=aaa'"但图片只会刷新一次。
所以需不同的可动态改变的URL地址。可在后面加上当前时间:+newData()
GDI+graphicsdeviceinterfaceplus的缩写,即图形设备接口。GDI+为开发者提供了一组实现与各种设备(具有图形化能力但不涉及图形细节的设备)进行交互的库函数。C#通过Bitmap类创建位图对象、Grephics类创建画板对象,再通过Pen类、Brush类、Color类等画位图:
Point结构在二维平面中定义点坐标的有序对。常用于定义窗体或控件位置、其他图形(线条/矩形等)边界。
创建:Pointp=newPoint(30,90);
IsEmpty属性检测Point结构是否为空。
Size结构存储有序整数对。常用于定义窗体、空间呵其他矩形区域的大小。
第一个构造函数接受一个Point结构:Pointp=newPoint(30,90);
Sizes=newSize(p);
第二个构造函数接受二个int值:Sizes=newSize(30,90);
主要属性:Whdtn、hight、isEmpty
Rectangle结构存储四个整数(表矩形位置和大小)。由一个定义左上角的Point结构和一个定义大小的Size结构组成。
主要属性:Location左上角坐标、Size矩形大小、Height/Width矩形高宽、Left/Right左右边x坐标、Top/Bottom上下边y坐标、isEmpty
[b]实现验证码主要语法:[/b]
//位图对象Bitmapbmp=newBitmap(120,32);
//画板对象Graphicsgp=Graphics.FromImage(bmp);
//画板背景色gp.Clear(Color.Silver);默认为black
//起点对象Pointp1=newPoint(0,4);
//画笔对象Penp=newPen(Color.Red);
//画刷颜色Brushs=Brushes.Red;
//文字对象stringcode="";
//文字保存到会话中Session["checkcode"]=code;
//画板绘制文字gp.DrawString(code,newFont("楷体",14),s,p1);(内容,字体,颜色,起点坐标)
//位图输出到页面bmp.Save(Response.OutputStream,ImageFormat.Gif);
开始验证码的实现:
一、创建一个一般应用程序(yzm.ashx)
usingSystem.Drawing;(此命名空间给GDI+提供基本图形处理功能的访问。) usingSystem.Drawing.Imaging; publicclassYZM:IHttpHandler,System.Web.SessionState.IRequiresSessionState{ publicvoidProcessRequest(HttpContextcontext){ context.Response.ContentType="text/JPEG";///将返回类型设置为JPEG格式 Bitmapbitmap=newBitmap(100,50);//创建一个Image位图对象。 Graphicsg=Graphics.FromImage(bitmap);//从指定的Image位图创建一个Graphics对象
Randomrand=newRandom();//创建一个随机数变量 intcode=rand.Next(1000,9999);//利用Next()返回在1000到9999之间的飞非负随机数。 stringstrCode=code.ToString();//将随机数转换为string类型。 HttpContext.Current.Session["Code"]=strCode;//必须实现System.Web.SessionState.IRequestSessionState接口后才能在ashx中读写Session!!!
g.DrawString(strCode,newFont("黑体",16),Brushes.Silver,newPoint(5,15));//绘制位图!<graphicsVar>.DrawString(随机数,字体,随机数颜色,随机数坐标)
//接下来用for循环为验证码位图添加随机直线 for(inti=0;i<10;i++) { intx1=rand.Next(bitmap.Width);//<randomVar>.Next(intmaxValue)指定随机数最大值 inty1=rand.Next(bitmap.Height); intx2=rand.Next(bitmap.Width); inty2=rand.Next(bitmap.Height); g.DrawLine(newPen(Color.Red),x1,y1,x2,y2); /*可用类似方式定义下列属性: <graphicsVar>.DrawLine()画随机直线 <graphicsVar>.SetPixsl()画随机噪音点 */ } g.DrawRectangle(newPen(Color.Silver),1,1,bitmap.Width-3,bitmap.Height-3);//给验证码位图绘画矩形边框 |
虚线框中的代码不是必须的,只是对位图的进一步绘画。
bitmap.Save(context.Response.OutputStream,ImageFormat.Jpeg);//用将位图添加到输出流、
}
publicboolIsReusable{
get{
returnfalse;
}
}
}
二、创建一个验证页面,调试!
protectedvoid提交验证码按钮_Click(objectsender,EventArgse)
{
//先从Session中读取正确的验证码,再验证用户输入的值
string正确的验证码=Convert.ToString(Session["Code"]);
if(TextBox1.Text==正确的验证码)
{
Label1.Text="验证成功";
}
else
{
Label1.Text="输入的验证码有误";
}
补充1:
如何实现点击图片刷新验证码?可添加onclick事件重新加载图片源:src=“”
<imgsrc="YZM.ashx"onclick="this.src='YZM.ashx?a='+newDate()"/>
注:添加onclick="this.src='YZM.ashx'"图片是不会刷新,需不同的URL地址。
可以添加onclick="this.src='YZM.ashx?a=aaa'"但图片只会刷新一次。
所以需不同的可动态改变的URL地址。可在后面加上当前时间:+newData()
相关文章推荐
- web前端图片懒加载实现原理
- web前端图片懒加载实现原理
- web前端图片懒加载实现原理(二)
- 关于SDWebImage中下载图片和缓存图片的实现原理
- Web验证码图片的生成-基于Java的实现
- node.js WEB开发中图片验证码的实现方法
- web前端图片懒加载实现原理
- node.js WEB开发中图片验证码的实现方法
- web前端图片懒加载实现原理(一)
- Web开发中的验证码图片的生成-基于Java的实现
- 使用SDWebImage实现图片下载的原理
- 【web前端性能优化】css sprite(图片精灵)-雪碧图实现原理
- iOS 多线程编程<十三、NSOperation图片下载,SDWebImage底层实现原理>
- 在Python web中实现验证码图片代码分享
- iOS实现WebView上图片放大 用法及原理
- 简单实现验证码随机数(其实原理很简单就是一堆图片,然后点击随机改变图片的src属性)
- Web上传文件的原理及实现
- Web上传文件的原理及实现[转]