web develop

行胜于言

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1 首先先建立一个新类(如:CreateImage.cs),然后在这个类中写入下面的代码
  2 //引用
  3 using System.Drawing;
  4 using System.Web;
  5 //执行代码
  6 public static void DrawImage()
  7   {
  8    CreateImage img=new CreateImage();
  9    HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
 10    img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
 11   }
 12   /// <summary>
 13   /// 生成验证图片
 14   /// </summary>
 15   /// <param name="checkCode">验证字符</param>
 16   private void CreateImages(string checkCode)
 17   {
 18    int iwidth = (int)(checkCode.Length * 13);
 19    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
 20    Graphics g = Graphics.FromImage(image);
 21    g.Clear(Color.White);
 22    //定义颜色
 23    Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
 24    //定义字体 
 25    string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
 26    Random rand = new Random();
 27    //随机输出噪点
 28    for(int i=0;i<50;i++)
 29    {
 30     int x = rand.Next(image.Width);
 31     int y = rand.Next(image.Height);
 32     g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
 33    }
 34    //输出不同字体和颜色的验证码字符
 35    for(int i=0;i<checkCode.Length;i++)
 36    {
 37     int cindex = rand.Next(7);
 38     int findex = rand.Next(5);
 39     Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
 40     Brush b = new System.Drawing.SolidBrush(c[cindex]);
 41     int ii=4;
 42     if((i+1)%2==0)
 43     {
 44      ii=2;
 45     }
 46     g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
 47    }
 48    //画一个边框
 49    g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
 50    //输出到浏览器
 51    System.IO.MemoryStream ms = new System.IO.MemoryStream();
 52    image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
 53    HttpContext.Current.Response.ClearContent();
 54    //Response.ClearContent();
 55    HttpContext.Current.Response.ContentType = "image/Jpeg";
 56    HttpContext.Current.Response.BinaryWrite(ms.ToArray());
 57    g.Dispose();
 58    image.Dispose();
 59   }
 60   /// <summary>
 61   /// 生成随机的字母
 62   /// </summary>
 63   /// <param name="VcodeNum">生成字母的个数</param>
 64   /// <returns>string</returns>
 65   public string RndNum(int VcodeNum) 
 66   {
 67    string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
 68    string[] VcArray = Vchar.Split(',') ;
 69    string VNum = "" ; //由于字符串很短,就不用StringBuilder了
 70    int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
 71    //采用一个简单的算法以保证生成随机数的不同
 72    Random rand =new Random();
 73    for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 
 74    { 
 75     if ( temp != -1
 76     {
 77      rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
 78     } 
 79     int t = rand.Next(VcArray.Length ) ;
 80     if (temp != -1 && temp == t) 
 81     {
 82      return RndNum( VcodeNum );
 83     }
 84     temp = t ;
 85     VNum += VcArray[t];
 86    }
 87    return VNum ;
 88   }
 89 
 90 其次建立一个新的页面(如:Image.aspx),在这个页面Page_Load的事件中写入引用类的方法,例如:
 91 private void Page_Load(object sender, System.EventArgs e)
 92   {
 93    CreateImage.DrawImage ();
 94   }
 95 最后在显示界面上使用Label,Image,Button,TextBox控件,
 96 Image控件的Url属性要连接Image.aspx,然后在写
 97  private void Button1_Click(object sender, System.EventArgs e)
 98   {
 99    if(this.TextBox2.Text.Trim()==Session["CheckCode"].ToString())
100    {
101     this.Label1.Text="显示成功!";
102    }
103    else
104    {this.Label1.Text="显示错误!";}
105   }
posted on 2006-04-11 09:39  曾经有梦  阅读(520)  评论(1编辑  收藏  举报