C# ve GDI+ ile Resim Doğrulama (Captcha)

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

C# ve GDI+ ile Resim Doğrulama (Captcha)

Mesaj gönderen lazio »

Kod: Tümünü seç

using System;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace VerifyLibrary
{
	public class VerifyImageKey
	{
		#region Private Members
		private int m_iCharWidth = 20;
		private int m_iImageWidth = 0;
		private int m_iImageHeight = 0;
		private byte m_iChaLength;
		private string m_sVerfyKey = string.Empty;
		private Brush oFontColor = new SolidBrush(Color.DarkBlue);
		private Brush oBackColor = new SolidBrush(Color.White);
		#endregion

		#region Properties
		public string VerifyKey
		{
			get
			{
				if (this.m_sVerfyKey.Equals(string.Empty))
					throw new Exception("Image not Generated !");
				return this.m_sVerfyKey;
			}
		}
		
		public int CharWidth
		{
			get
			{
				return this.m_iCharWidth;
			}
			set
			{
				if (value < 10)
					throw new Exception("Char Width Must Minimum 10!");
				this.m_iCharWidth = value;
			}
		}
		public byte CharacterLength
		{
			get
			{
				return this.m_iChaLength;
			}
			set
			{
				if (!(value > 0))
					throw new Exception("You Must Enter Minimum One Character Length !");
				this.m_iChaLength = value;
			}
		}

		public Brush FontColor
		{
			get
			{
				return this.oFontColor;
			}
			set
			{
				this.oFontColor = value;
			}
		}
		public Brush BackColor
		{
			get
			{
				return this.oBackColor;
			}
			set
			{
				this.oBackColor = value;
			}
		}
		#endregion

		#region Constructures
		public VerifyImageKey(byte iCharLength)
		{
			this.m_iChaLength = iCharLength;
			this.m_iImageWidth = this.m_iCharWidth * this.m_iChaLength + 20;	// Set ImageWidth value
			this.m_iImageHeight = this.m_iCharWidth * 2;	// Set ImageHeight value
		}
		public VerifyImageKey(byte iCharLength, int iCharWidth)
		{
			this.m_iChaLength = iCharLength;
			this.CharWidth = iCharWidth;
			this.m_iImageWidth = this.m_iCharWidth * this.m_iChaLength + 20;	// Set ImageWidth value
			this.m_iImageHeight = this.m_iCharWidth * 2;	// Set ImageHeight value
		}
		#endregion

		#region Methods
		public Bitmap GenerateImage()
		{
			Bitmap oBitmap = new Bitmap(this.m_iImageWidth, this.m_iImageHeight);
			Graphics oGraphics = Graphics.FromImage(oBitmap);
			oGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
			Rectangle oRectangle = new Rectangle(0, 0, this.m_iImageWidth, this.m_iImageHeight);
			oGraphics.FillRectangle(oBackColor, oRectangle);
			m_sVerfyKey = GenerateStringKey();
			oGraphics.DrawString(this.m_sVerfyKey, new Font("Verdana", this.m_iCharWidth, FontStyle.Regular, GraphicsUnit.Point), oFontColor, oRectangle);

			oBitmap = FillDirty(oBitmap);
			oGraphics.Dispose();

			return oBitmap;
		}

		private Bitmap FillDirty(Bitmap oBitmap)
		{
			Graphics oGraphics = Graphics.FromImage(oBitmap);
			Pen oPen;		
			Random oRand = new Random();
			for (int i = 0; i < this.m_iChaLength * 10; i++)
			{
				oPen = new Pen(Color.FromArgb(oRand.Next(0, 255), oRand.Next(0, 255), oRand.Next(0, 255)));
				oGraphics.DrawBezier(oPen, new Point(oRand.Next(0, m_iImageWidth), oRand.Next(0, m_iImageWidth)),
										   new Point(oRand.Next(0, m_iImageWidth), oRand.Next(0, m_iImageWidth)),
										   new Point(oRand.Next(0, m_iImageWidth), oRand.Next(0, m_iImageWidth)),
										   new Point(oRand.Next(0, m_iImageWidth), oRand.Next(0, m_iImageWidth)));
			}
			oGraphics.Dispose();
			return oBitmap;
		}

		private string GenerateStringKey()
		{
			string sKey = string.Empty;
			Random oRand = new Random();
			int iChar;

			for (int i = 0; i < this.m_iChaLength; i++)
			{
				iChar = oRand.Next(48, 91);
				if (iChar > 57 && iChar < 65)
				{
					i--;
					continue;
				}
				sKey  += (char)iChar;
			}
			return sKey;
		}
		#endregion
	}
}

Kod: Tümünü seç

VerifyImageKey oVerify = new VerifyImageKey(5, 20);
Bitmap oBitmap = oVerify.GenerateImage();
sKey = oVerify.VerifyKey;
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

resmin neyini doğruluyor bu hocam?

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

hani web sitelerinde vardırya, bir resimdeki karakterleri bir edit e girmen istenir..
sayfa post edildiğinde de resimdeki karakterlerle kullanıcının girdiği karakter karşılaştırılır..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Faydalı bir şey :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla