首页 > 代码库 > 动态生成验证码
动态生成验证码
知识点:
1. 对图像的操作
问题:
动态生成验证码
解决方案
1 <%@ WebHandler Language="C#" Class="ValidateCode" %> 2 3 using System; 4 using System.Web; 5 using System.Drawing; 6 using System.IO; 7 8 public class ValidateCode : IHttpHandler { 9 10 public void ProcessRequest (HttpContext context) {11 context.Response.ContentType = "text/plain";12 //context.Response.Write("Hello World");13 Random r = new Random();14 int n = r.Next(10000,100000);15 CreateValidateGraphic(n.ToString(),context);16 }17 /// <summary>18 /// 创建验证码的图片19 /// </summary>20 /// <param name="containsPage">要输出到的page对象</param>21 /// <param name="validateNum">验证码</param>22 public void CreateValidateGraphic(string validateCode, HttpContext context)23 {24 Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);25 Graphics g = Graphics.FromImage(image);26 try27 {28 //生成随机生成器29 Random random = new Random();30 //清空图片背景色31 g.Clear(Color.White);32 //画图片的干扰线33 for (int i = 0; i < 25; i++)34 {35 int x1 = random.Next(image.Width);36 int x2 = random.Next(image.Width);37 int y1 = random.Next(image.Height);38 int y2 = random.Next(image.Height);39 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);40 }41 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));42 System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),43 Color.Blue, Color.DarkRed, 1.2f, true);44 g.DrawString(validateCode, font, brush, 3, 2);45 //画图片的前景干扰点46 for (int i = 0; i < 100; i++)47 {48 int x = random.Next(image.Width);49 int y = random.Next(image.Height);50 image.SetPixel(x, y, Color.FromArgb(random.Next()));51 }52 //画图片的边框线53 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);54 //保存图片数据55 MemoryStream stream = new MemoryStream();56 image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);57 //输出图片流58 context.Response.Clear();59 context.Response.ContentType = "image/jpeg";60 context.Response.BinaryWrite(stream.ToArray());61 }62 finally63 {64 g.Dispose();65 image.Dispose();66 }67 }68 69 public bool IsReusable {70 get {71 return false;72 }73 }74 75 }
动态生成验证码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。