04
2012
04

C# 验证码图片生成

//生成随机字符串
private String GetRandomString(Int32 count)
{
StringBuilder sb = new StringBuilder();
for (Int32 i = 0; i <= count - 1; i++)
{
sb.Append(GetRandomChar(i + (int)DateTime.Now.Ticks));
}
return sb.ToString();
}


//生成随机字符
private Char GetRandomChar(int Seed)
{
Int32 tmpInt = 0;
Random rndNum = new Random(Seed);
while (true)
{
tmpInt = rndNum.Next(48, 122);
//如果为数字
if (tmpInt >= 48 && tmpInt <= 57)
{
break;
}
//如果为大写字母
if (tmpInt >= 65 && tmpInt <= 90)
{
break;
}

//如果为小写字母

if (tmpInt >= 97 && tmpInt <= 122)
{
break;
}
}
return Convert.ToChar(tmpInt);
}


//根据字符串生成验证图片

private Image GetImageFromString(String str,Int32 imageWidth,Int32 imageHeight)

{

Bitmap rtnImage;

rtnImage = new Bitmap(imageWidth, imageHeight);

Graphics g = Graphics.FromImage(rtnImage);

Int32 strCount = str.Length;


Int32 charWidth = rtnImage.Width / strCount;

Int32 charHeight = rtnImage.Height;


Random rndNum = new Random();

//背景笔刷

System.Drawing.Drawing2D.LinearGradientBrush tmpBrush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, rtnImage.Width, rtnImage.Height), Color.FromArgb(rndNum.Next(0, 255), rndNum.Next(0, 255), rndNum.Next(0, 255), rndNum.Next(0, 255)), Color.FromArgb(rndNum.Next(0, 255), rndNum.Next(0, 255), rndNum.Next(0, 255), rndNum.Next(0, 255)), rndNum.Next(0, 360));

g.FillRectangle(tmpBrush, new Rectangle(0, 0, rtnImage.Width, rtnImage.Height));

for (int i = 0; i <= strCount - 1; i++)

{

//坐标转换(先平移,后旋转)

g.TranslateTransform(charWidth * i + rndNum.Next(0 - charWidth / 4, charWidth / 4), rndNum.Next(0, 10));

g.RotateTransform(rndNum.Next(-30,30));

Font tmpFont = new Font("Arial",rndNum.Next(charWidth / 2,charWidth), FontStyle.Regular, GraphicsUnit.Pixel);

g.DrawString(str.Substring(i, 1), tmpFont, tmpBrush, 0,0);

g.ResetTransform();

}

return rtnImage;

}
« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。