Professionallearn.com

[ Log On ]
< <
 

Details

Posted By: P.R.S
11/5/2012 12:00:00 AM
language: Asp/Asp.net

Step 1 Create a CaptchaImage.cs

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.Drawing.Text;

 

namespace CaptchaImage

{

      /// <summary>

      /// Summary description for CaptchaImage.

      /// </summary>

      public class CaptchaImage

      {

            // Public properties (all read-only).

            public string Text

            {

                  get { return this.text; }

            }

            public Bitmap Image

            {

                  get { return this.image; }

            }

            public int Width

            {

                  get { return this.width; }

            }

            public int Height

            {

                  get { return this.height; }

            }

 

            // Internal properties.

            private string text;

            private int width;

            private int height;

            private string familyName;

            private Bitmap image;

 

            // For generating random numbers.

            private Random random = new Random();

 

            // ====================================================================

            // Initializes a new instance of the CaptchaImage class using the

            // specified text, width and height.

            // ====================================================================

            public CaptchaImage(string s, int width, int height)

            {

                  this.text = s;

                  this.SetDimensions(width, height);

                  this.GenerateImage();

            }

 

            // ====================================================================

            // Initializes a new instance of the CaptchaImage class using the

            // specified text, width, height and font family.

            // ====================================================================

            public CaptchaImage(string s, int width, int height, string familyName)

            {

                  this.text = s;

                  this.SetDimensions(width, height);

                  this.SetFamilyName(familyName);

                  this.GenerateImage();

            }

 

            // ====================================================================

            // This member overrides Object.Finalize.

            // ====================================================================

            ~CaptchaImage()

            {

                  Dispose(false);

            }

 

            // ====================================================================

            // Releases all resources used by this object.

            // ====================================================================

            public void Dispose()

            {

                  GC.SuppressFinalize(this);

                  this.Dispose(true);

            }

 

            // ====================================================================

            // Custom Dispose method to clean up unmanaged resources.

            // ====================================================================

            protected virtual void Dispose(bool disposing)

            {

                  if (disposing)

                        // Dispose of the bitmap.

                        this.image.Dispose();

            }

 

            // ====================================================================

            // Sets the image width and height.

            // ====================================================================

            private void SetDimensions(int width, int height)

            {

                  // Check the width and height.

                  if (width <= 0)

                        throw new ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero.");

                  if (height <= 0)

                        throw new ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero.");

                  this.width = width;

                  this.height = height;

            }

 

            // ====================================================================

            // Sets the font used for the image text.

            // ====================================================================

            private void SetFamilyName(string familyName)

            {

                  // If the named font is not installed, default to a system font.

                  try

                  {

                        Font font = new Font(this.familyName, 12F);

                        this.familyName = familyName;

                        font.Dispose();

                  }

                  catch (Exception ex)

                  {

                        this.familyName = System.Drawing.FontFamily.GenericSerif.Name;

                  }

            }

 

            // ====================================================================

            // Creates the bitmap image.

            // ====================================================================

            private void GenerateImage()

            {

                  // Create a new 32-bit bitmap image.

                  Bitmap bitmap = new Bitmap(this.width, this.height, PixelFormat.Format32bppArgb);

 

                  // Create a graphics object for drawing.

                  Graphics g = Graphics.FromImage(bitmap);

                  g.SmoothingMode = SmoothingMode.AntiAlias;

                  Rectangle rect = new Rectangle(0, 0, this.width, this.height);

 

                  // Fill in the background.

                  HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.Aqua, Color.AliceBlue);

                  g.FillRectangle(hatchBrush, rect);

 

                  // Set up the text font.

                  SizeF size;

                  float fontSize = rect.Height + 1;

                  Font font;

                  // Adjust the font size until the text fits within the image.

                  do

                  {

                        fontSize--;

                        font = new Font(this.familyName, fontSize, FontStyle.Bold);

                        size = g.MeasureString(this.text, font);

                  } while (size.Width > rect.Width);

 

                  // Set up the text format.

                  StringFormat format = new StringFormat();

                  format.Alignment = StringAlignment.Center;

                  format.LineAlignment = StringAlignment.Center;

 

                  // Create a path using the text and warp it randomly.

                  GraphicsPath path = new GraphicsPath();

                  path.AddString(this.text, font.FontFamily, (int) font.Style, font.Size, rect, format);

                  float v = 4F;

                  PointF[] points =

                  {

                        new PointF(this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v),

                        new PointF(rect.Width - this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v),

                        new PointF(this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v),

                        new PointF(rect.Width - this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v)

                  };

                  Matrix matrix = new Matrix();

                  matrix.Translate(0F, 0F);

                  path.Warp(points, rect, matrix, WarpMode.Perspective, 0F);

 

                  // Draw the text.

                  hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.LightGray, Color.DarkGray);

                  g.FillPath(hatchBrush, path);

 

                  // Add some random noise.

                  int m = Math.Max(rect.Width, rect.Height);

                  for (int i = 0; i < (int) (rect.Width * rect.Height / 30F); i++)

                  {

                        int x = this.random.Next(rect.Width);

                        int y = this.random.Next(rect.Height);

                        int w = this.random.Next(m / 50);

                        int h = this.random.Next(m / 50);

                        g.FillEllipse(hatchBrush, x, y, w, h);

                  }

 

                  // Clean up.

                  font.Dispose();

                  hatchBrush.Dispose();

                  g.Dispose();

 

                  // Set the image.

                  this.image = bitmap;

            }

      }

}

 

 

 

Step 2 Copy And paste in Default.aspx.cs

 

 

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

 

namespace CaptchaImage

{

public partial class _Default : System.Web.UI.Page

{

protected System.Web.UI.WebControls.TextBox CodeNumberTextBox;

protected System.Web.UI.WebControls.Button SubmitButton;

protected System.Web.UI.WebControls.Label MessageLabel;

 

// For generating random numbers.

private Random random = new Random();

 

private void Page_Load(object sender, System.EventArgs e)

{

if (!this.IsPostBack)

 

// Create a random code and store it in the Session object.

this.Session["CaptchaImageText"] = GenerateRandomCode();

 

else

{

// On a postback, check the user input.

if (this.CodeNumberTextBox.Text == this.Session["CaptchaImageText"].ToString())

{

// Display an informational message.

this.MessageLabel.CssClass = "info";

this.MessageLabel.Text = "Correct!";

}

else

{

// Display an error message.

this.MessageLabel.CssClass = "error";

this.MessageLabel.Text = "ERROR: Incorrect, try again.";

 

// Clear the input and create a new random code.

this.CodeNumberTextBox.Text = "";

this.Session["CaptchaImageText"] = GenerateRandomCode();

}

}

}

 

//

// Returns a string of six random digits.

//

private string GenerateRandomCode()

{

string s = "";

for (int i = 0; i < 6; i++)

s = String.Concat(s, this.random.Next(10).ToString());

return s;

}

 

#region Web Form Designer generated code

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: This call is required by the ASP.NET Web Form Designer.

//

InitializeComponent();

base.OnInit(e);

}

 

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

 

}

#endregion

}

}

 

Step 3 Add new JpegImage.aspx and copy and paste in JpegImage.aspx.cs

 

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Drawing.Imaging;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

 

namespace CaptchaImage

{

public partial class JpegImage : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{

// Create a CAPTCHA image using the text stored in the Session object.

CaptchaImage ci = new CaptchaImage(this.Session["CaptchaImageText"].ToString(), 200, 50, "Century Schoolbook");

 

// Change the response headers to output a JPEG image.

this.Response.Clear();

this.Response.ContentType = "image/jpeg";

 

// Write the image to the response stream in JPEG format.

ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg);

 

// Dispose of the CAPTCHA image object.

ci.Dispose();

}

 

#region Web Form Designer generated code

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: This call is required by the ASP.NET Web Form Designer.

//

InitializeComponent();

base.OnInit(e);

}

 

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

}

}

 

Download Source Code Click Here

Share Your Source Code or Article

Do you have source code, articles, tutorials, web links, and books to share? You can write your own content here. You can even have your own blog.

Submit now...

Sponsor