程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第九講 ASP.NET驗證碼技術(3)

C#發現之旅第九講 ASP.NET驗證碼技術(3)

編輯:關於C語言

checkimage.ASPx

首先根據上節課程的內容,我們要創建一 個圖片服務頁面,專門用於提供包含驗證碼文本的圖片,為此我們建立一個 checkimage.ASPx 的頁面。其Html代碼很簡單,只有一行,不輸出任何內容。在其Page_Load 方法中就有創建驗證碼圖片的過程。

// 創建一個包含隨機內容的驗證碼文本
System.Random rand = new Random();
int len = rand.Next(4 , 6 );
char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray ();
System.Text.StringBuilder myStr = new System.Text.StringBuilder();
for( int iCount = 0 ; iCount < len ; iCount ++ )
{
   myStr.Append( chars[ rand.Next( chars.Length )]);
}
string text = myStr.ToString();
// 保存驗證碼到 session 中以便其他模塊使用
this.Session["checkcode"] = text ;
Size ImageSize = Size.Empty ;
Font myFont = new Font("MS Sans Serif" , 20 );
// 計算驗證 碼圖片大小
using( Bitmap bmp = new Bitmap( 10 , 10 ))
{
  using( Graphics g = Graphics.FromImage( bmp ))
  {
    SizeF size = g.MeasureString( text , myFont , 10000 );
    ImageSize.Width = ( int ) size.Width + 8 ;
    ImageSize.Height = ( int ) size.Height + 8 ;
  }
}
// 創建驗證碼圖片
using( Bitmap bmp = new Bitmap( ImageSize.Width , ImageSize.Height ))
{
  // 繪制驗證碼文本
   using( Graphics g = Graphics.FromImage( bmp ))
  {
    g.Clear( Color.White );
    using( StringFormat f = new StringFormat())
     {
      f.Alignment = StringAlignment.Near ;
       f.LineAlignment = StringAlignment.Center ;
      f.FormatFlags = StringFormatFlags.NoWrap ;
      g.DrawString(
         text ,
        myFont ,
        Brushes.Black ,
         new RectangleF(
        0 ,
        0 ,
        ImageSize.Width ,
        ImageSize.Height ),
        f );
    }//using
  }//using
  // 制造噪聲 雜點面積占圖片面積的 30%
  int num = ImageSize.Width * ImageSize.Height * 30 / 100 ;
  for( int iCount = 0 ; iCount < num ; iCount ++ )
  {
    // 在隨機的位置使用隨機的顏色設置圖片的像素
    int x = rand.Next( ImageSize.Width );
    int y = rand.Next( ImageSize.Height );
    int r = rand.Next( 255 );
     int g = rand.Next( 255 );
    int b = rand.Next( 255 );
     Color c = Color.FromArgb( r , g , b );
    bmp.SetPixel( x , y , c );
  }//for
  // 輸出圖片
  System.IO.MemoryStream ms = new System.IO.MemoryStream();
  bmp.Save( ms , System.Drawing.Imaging.ImageFormat.Png );
  this.Response.ContentType = "image/png";
  ms.WriteTo( this.Response.OutputStream );
   ms.Close();
}//using
myFont.Dispose();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved