额~~~代码我有,但我也不是完全理解,在上面我写了简单的注释,
只能简单的讲解!!
public partial class Code : System.Web.UI.Page
{
string _str_code = "0,1,2,3,4,5,6,7,8,9,a,b,C,D,e,F,g,h,I,j,K,L,m,N,o,p,Q,r,S,t,u,V,W,X,y,Z";
int _int_length = 4;
protected void Page_Load(object sender, EventArgs e)
{
string str_code = code_view();
Session["code"] = str_code;
view_img(str_code);
} /// <summary>
/// 生成验证码的随机数
/// </summary>
/// <returns></returns>
private string code_view()
{
string return_str = "";
string[] str_arr = _str_code.Split(new char[] { ',' }); Random r = new Random(unchecked((int)DateTime.Now.Ticks));//让产生的随机数不重复
//产生随机数
int int_start = -1;
for (int i = 0; i < _int_length; i++)
{
int_start = r.Next(0, str_arr.Length - 1);
return_str += str_arr[int_start];
} return return_str;
} /// <summary>
/// 用GDI+将随机数绘制到背景图片上
/// </summary>
/// <param name="str_code"></param>
private void view_img(string str_code)
{
Bitmap img1 = new Bitmap(70, 30);//用位图定位图片的大小 //绘制验证码
Graphics ps = Graphics.FromImage(img1);
ps.Clear(Color.White);
Font ft = new Font("Arial", 14, FontStyle.Bold);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img1.Width, img1.Height), Color.Blue, Color.DarkOrange, 1.2f);
System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath("~") + @"\BackImage.gif");
ps.DrawImage(img2, new Rectangle(0, 0, img1.Width, img1.Height));
ps.DrawString(str_code, ft, brush, 2, 2);
ps.DrawRectangle(new Pen(Color.Silver), new Rectangle(0, 0, img1.Width - 1, img1.Height - 1)); //将编辑好的验证码保存到内存中
MemoryStream ms = new MemoryStream();
img1.Save(ms, ImageFormat.Gif); //将内存中的验证码输出到页面
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray()); ms.Dispose();
ps.Dispose();
}
}
只能简单的讲解!!
public partial class Code : System.Web.UI.Page
{
string _str_code = "0,1,2,3,4,5,6,7,8,9,a,b,C,D,e,F,g,h,I,j,K,L,m,N,o,p,Q,r,S,t,u,V,W,X,y,Z";
int _int_length = 4;
protected void Page_Load(object sender, EventArgs e)
{
string str_code = code_view();
Session["code"] = str_code;
view_img(str_code);
} /// <summary>
/// 生成验证码的随机数
/// </summary>
/// <returns></returns>
private string code_view()
{
string return_str = "";
string[] str_arr = _str_code.Split(new char[] { ',' }); Random r = new Random(unchecked((int)DateTime.Now.Ticks));//让产生的随机数不重复
//产生随机数
int int_start = -1;
for (int i = 0; i < _int_length; i++)
{
int_start = r.Next(0, str_arr.Length - 1);
return_str += str_arr[int_start];
} return return_str;
} /// <summary>
/// 用GDI+将随机数绘制到背景图片上
/// </summary>
/// <param name="str_code"></param>
private void view_img(string str_code)
{
Bitmap img1 = new Bitmap(70, 30);//用位图定位图片的大小 //绘制验证码
Graphics ps = Graphics.FromImage(img1);
ps.Clear(Color.White);
Font ft = new Font("Arial", 14, FontStyle.Bold);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img1.Width, img1.Height), Color.Blue, Color.DarkOrange, 1.2f);
System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath("~") + @"\BackImage.gif");
ps.DrawImage(img2, new Rectangle(0, 0, img1.Width, img1.Height));
ps.DrawString(str_code, ft, brush, 2, 2);
ps.DrawRectangle(new Pen(Color.Silver), new Rectangle(0, 0, img1.Width - 1, img1.Height - 1)); //将编辑好的验证码保存到内存中
MemoryStream ms = new MemoryStream();
img1.Save(ms, ImageFormat.Gif); //将内存中的验证码输出到页面
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray()); ms.Dispose();
ps.Dispose();
}
}
解决方案 »
- 非托管资源已释放
- 有用过 Microsoft.StyleCop 代码检查的吗
- C# 中有获得字符串长度的函数吗?
- 高难度问题,webbrowser控件中打开本地路径,如何获取选中的文件或文件夹?
- 谁能告诉我怎样得到一个数据库表中的一列的列的数据类型和列宽(及定义该列的大小)?谢谢
- 急!!!谁有<windows网络编程 第二版>的中文电子书?
- 当一个对象被添加到多个集合,当其中一个引用被删除后,全部都删除
- IE的控件树的句柄名,应该是这个问题吧
- 主动调用事件的方法?
- System.IO.InvalidDataException压缩文件错误!?
- 新做一个项目,请帮帮忙给意见
- C#中打印机操作的几个问题.
就是自定义个空件,我是继承的panel,
然后随机生成你想要随机码,然后画到panel里,
如果想有点背景,你再处理下。
http://www.cnblogs.com/liudao/archive/2007/04/29/732065.html
我给帖一段参考下
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;
public partial class ValidateCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Bitmap newBitmap = new Bitmap(75, 27, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(newBitmap);
Random r = new Random();
g.Clear(Color.White);
Color c1 = Color.FromArgb(64, 184, 6);
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 10, 75, 27), c1, c1, 0.0f, true); //for (int i = 0; i < 25; i++)
//{
// int x1 = r.Next(newBitmap.Width);
// int x2 = r.Next(newBitmap.Width);
// int y1 = r.Next(newBitmap.Height);
// int y2 = r.Next(newBitmap.Height);
// g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
//}
//for (int i = 0; i < 100; i++)
//{
// int x = r.Next(newBitmap.Width);
// int y = r.Next(newBitmap.Height);
// newBitmap.SetPixel(x, y, Color.FromArgb(r.Next()));
//} Color c = Color.FromArgb(234,234,234);
g.FillRectangle(new SolidBrush(c), 0, 0, 75, 27);
string value = GenerateRandom(4);
Font font = new Font("Arial", 18, System.Drawing.FontStyle.Regular);
g.DrawString(value, font, brush, 0, 0);
g.DrawRectangle(new Pen(Color.White), 0, 0, 75, 27);
//g.FillRectangle(new SolidBrush(Color.Gray),0,12,80,1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
newBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/gif";
Response.BinaryWrite(ms.ToArray()); Session["validatecode"] = value;
}
private static char[] constant =
{
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','Z','X','Y','Z',
};
public static string GenerateRandom(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(36);
Random rd = new Random();
for (int i = 0; i < Length; i++)
{
newRandom.Append(constant[rd.Next(36)]);
}
return newRandom.ToString();
}
}