AntiRobot Image (èñõîäíèêè)

Èñòî÷íèê: aspnetmania

Êîä äëÿ ãåíåðàöèè èçîáðàæåíèé ñ êîäàìè, êîòîðûå ïðåïÿòñòâóþò àâòîìàòè÷åñêîé ðåãèñòðàöèè.

  1 //AntiRobotImage.cs
  2 using System;
  3 using System.Drawing;
  4 using System.Drawing.Drawing2D;
  5 using System.Drawing.Imaging;
  6 using System.Drawing.Text;
  7
  8
  9 namespace Gaech.Web.UI
 10 {
 11     public class AntiRobotImage
 12     {
 13         private string[] Fonts = { "Verdana", "Tahoma", "Arial", "Small", "Courier", "Fixedsys", "Garamound" };
 14
 15         #region Text
 16         private string text;
 17         /// <summary>
 18         /// Gets or sets the text.
 19         /// </summary>
 20         /// <value>The text.</value>
 21         public string Text
 22         {
 23             get
 24             {
 25                 return text;
 26             }
 27             set
 28             {
 29                 text = value;
 30             }
 31         }
 32         #endregion
 33
 34         #region Width
 35         private int width;
 36         /// <summary>
 37         /// Gets or sets the image width.
 38         /// </summary>
 39         /// <value>The width.</value>
 40         public int Width
 41         {
 42             get
 43             {
 44                 return width;
 45             }
 46             set
 47             {
 48                 width = value;
 49             }
 50         }
 51         #endregion
 52
 53         #region Height
 54         private int height;
 55         /// <summary>
 56         /// Gets or sets the image height.
 57         /// </summary>
 58         /// <value>The height.</value>
 59         public int Height
 60         {
 61             get
 62             {
 63                 return height;
 64             }
 65             set
 66             {
 67                 height = value;
 68             }
 69         }
 70         #endregion
 71
 72         #region Image
 73         private Bitmap image;
 74         /// <summary>
 75         /// Gets or sets the image.
 76         /// </summary>
 77         /// <value>The image.</value>
 78         public Bitmap Image
 79         {
 80             get
 81             {
 82                 return image;
 83             }
 84             set
 85             {
 86                 image = value;
 87             }
 88         }
 89         #endregion
 90
 91         #region FontFamily
 92         private string fontFamily;
 93         public string FontFamily
 94         {
 95             get
 96             {
 97                 return fontFamily;
 98             }
 99             set
100             {
101                 fontFamily = value;
102             }
103         }
104         #endregion
105
106         #region Random
107         // For generating random numbers.
108         private Random random = new Random();
109         #endregion
110
111         #region GenerateImage()
112         private void GenerateImage()
113         {
114             // Create a new 32-bit bitmap image.
115             Bitmap bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb);
116
117             // Create a graphics object for drawing.
118             Graphics g = Graphics.FromImage(bitmap);
119             g.SmoothingMode = SmoothingMode.AntiAlias;
120             Rectangle rect = new Rectangle(0, 0, Width, Height);
121
122             // Fill in the background.
123             HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White);
124             g.FillRectangle(hatchBrush, rect);
125
126             // Set up the text font.
127             SizeF size;
128             float fontSize = height;
129             Font font;
130             // Adjust the font size until the text fits within the image.
131             do
132             {
133                 fontSize--;
134                 font = new Font(FontFamily, fontSize, FontStyle.Bold);
135                 size = g.MeasureString(this.text, font);
136             } while (size.Width > rect.Width);
137
138             // Set up the text format.
139             StringFormat format = new StringFormat();
140             format.Alignment = StringAlignment.Center;
141             format.LineAlignment = StringAlignment.Center;
142
143             // Create a path using the text and warp it randomly.
144             GraphicsPath path = new GraphicsPath();
145             path.AddString(this.text, font.FontFamily, (int)font.Style, font.Size, rect, format);
146             float v = 4F;
147             PointF[] points =
148    {
149     new PointF(this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v),
150     new PointF(rect.Width - this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v),
151     new PointF(this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v),
152     new PointF(rect.Width - this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v)
153    };
154             Matrix matrix = new Matrix();
155             matrix.Translate(0F, 0F);
156             path.Warp(points, rect, matrix, WarpMode.Perspective, 0F);
157
158             // Draw the text.
159             hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.LightGray, Color.DarkGray);
160             g.FillPath(hatchBrush, path);
161
162             // Add some random noise.
163             int m = Math.Max(rect.Width, rect.Height);
164             for (int i = 0; i < (int)(rect.Width * rect.Height / 30F); i++)
165             {
166                 int x = this.random.Next(rect.Width);
167                 int y = this.random.Next(rect.Height);
168                 int w = this.random.Next(m / 50);
169                 int h = this.random.Next(m / 50);
170                 g.FillEllipse(hatchBrush, x, y, w, h);
171             }
172
173             // Clean up.
174             font.Dispose();
175             hatchBrush.Dispose();
176             g.Dispose();
177
178             // Set the image.
179             this.image = bitmap;
180         }
181         #endregion
182
183         #region Constructors()
184
185         /// <summary>
186         /// Initializes a new instance of the <see cref="T:AntiRobotImage"/> class.
187         /// </summary>
188         /// <param name="Text">The text.</param>
189         /// <param name="Width">The width.</param>
190         /// <param name="Height">The height.</param>
191         public AntiRobotImage(string Text, int Width, int Height)
192         {
193             this.Text = Text;
194             this.Width = Width;
195             this.Height = Height;
196             this.FontFamily = Fonts[random.Next(0, Fonts.Length - 1)];
197             GenerateImage();
198         }
199         #endregion
200     }
201 }
202 // SampleAntiRobotImage.aspx.cs
203 using System;
204 using System.Data;
205 using System.Configuration;
206 using System.Collections;
207 using System.Web;
208 using System.Web.Security;
209 using System.Web.UI;
210 using System.Web.UI.WebControls;
211 using System.Web.UI.WebControls.WebParts;
212 using System.Web.UI.HtmlControls;
213
214 using Mediachase.Web.UI;
215
216 public partial class Controls_Comments_AntiRobot : System.Web.UI.Page
217 {
218     private Random random = new Random();
219
220     protected void Page_Load(object sender, EventArgs e)
221     {
222         if (Session["AntiRobotImageKeyword"] == null)
223         {
224             Session["AntiRobotImageKeyword"] = random.Next(100000, 999999).ToString();
225         }
226         AntiRobotImage ari = new AntiRobotImage(Session["AntiRobotImageKeyword"].ToString(), 150, 50);
227
228         Response.Clear();
229
230         Response.ContentType = "image/jpeg";
231
232
233         ari.Image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
234     }
235 }
236 //ÈÑÏÎËÜÇÎÂÀÍÈÅ
237 <img src="SampleAntiRobotImage.aspx">


Ñòðàíèöà ñàéòà http://test.interface.ru
Îðèãèíàë íàõîäèòñÿ ïî àäðåñó http://test.interface.ru/home.asp?artId=3172