通过IHttpHandler实现图片验证码

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.Web;
using System.Web.SessionState;

namespace HttpModuleDemo
{
     ///   <summary>
    
///  VerificationCode 的摘要说明
    
///   </summary>
     public  class VerificationCode : IHttpHandler,IRequiresSessionState 
    {
         public  void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType =  " image/jpeg ";
             // 建立Bitmap对象,绘图
            
// Bitmap:是用于处理由像素数据定义的图像的对象
            Bitmap bitmap =  new Bitmap( 200, 60);
             // Graphics:封装一个 GDI+ 绘图图面
            Graphics graph = Graphics.FromImage(bitmap);
            graph.FillRectangle( new SolidBrush(Color.White),  0020060);
            Font font =  new Font(FontFamily.GenericSerif,  48, FontStyle.Bold, GraphicsUnit.Pixel);
            Random r =  new Random();
             string letters =  " ABCDEFGHIJKLMNPQRSTUVWXYZ ";
             string letter;
            StringBuilder s =  new StringBuilder();
            
             // 添加随机的五个字母
             for ( int x =  0; x <  5; x++)
            {
                letter = letters.Substring(r.Next( 0, letters.Length -  1),  1);
                s.Append(letter);
                graph.DrawString(letter, font,  new SolidBrush(Color.Black), x *  38, r.Next( 015));
            }
             /*
            //混淆背景
            Pen linePen = new Pen(new SolidBrush(Color.Black), 2);
            for (int x = 0; x < 6; x++)
                graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
            
*/
             // 将图片保存到输出流中      
            bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);

             /// /如果没有实现IRequiresSessionState,则这里会出错,也无法生成图片
            context.Session[ " CheckCode "] = s.ToString();
            context.Response.End();   
        }

         public  bool IsReusable
        {
             get
            {
                 return  false;
            }
        }
    }
}

 

你可能感兴趣的:(handler)