中联区卫经验分享吧 关注:97贴子:1,095
  • 0回复贴,共1

【其它】使用asp.net如何在网页上生成验证码图片

只看楼主收藏回复

【问题】
在日常的开发中经常会遇到登录时使用验证码来检验客户端的登录合法性,那么这个验证码通常是一副图片显示,如何来正确生成验证码呢。
【分析】
通常是在asp.net的后台处理程序中向客户端输出一张图像流,这个图像流中已经带有图像的数字或字母信息,而图像在后台加载页面时就已经生成了。
在html客户端创建一个图像<img>的标记,通过Js脚本来设置src属性值等于当前生成图像的页面名称,再添加一个随机数据,防止客户端缓存导致刷新无效。
【处理】
1.创建一个页面web页面。继承System.Web.UI.Page
2.在Page_Load中添加处理过程
//画板
Bitmap bm = new Bitmap(1024, 600);
//画笔对象
Graphics g = Graphics.FromImage(bm);
g.Clear(Color.WhiteSmoke);
//画笔类型
Pen p = new Pen(Color.Chocolate, 1);
for (int i = 1; i <= 12; i++)
{
g.DrawLine(p, 50, 50* i, 1000, 50*i);
}
//形状对象
Rectangle rect = new Rectangle(50, 150, 50, 50);
g.DrawEllipse(p, rect);
//刷子与填充对象
Brush b = new SolidBrush(Color.Red);
Font drawFont = new Font("Arial", 12);
for (int i = 0; i <= 10; i++)
{
g.DrawString(Convert.ToString(i * 10), drawFont, b, new PointF(i * 100, 580));
}
for (int j = 0; j <= 5; j++)
{
g.DrawString(Convert.ToString(j * 500), drawFont, b, new PointF(0, 600 - j * 100));
}
Random r = new Random();
Brush b1 = new SolidBrush(Color.Blue);
g.DrawString(Convert.ToString(r.Next()), new Font("宋体", 18, FontStyle.Italic, GraphicsUnit.Pixel), b1, new PointF(r.Next(400), r.Next(400)));
//将对象返回给请的客户端
bm.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
而此时设置的img 的src源则是已创建好的图像。


1楼2015-01-30 17:12回复