BinaryWrite方法输出验证码
在创建网站中验证码是不可或缺的。可以利用BinaryWrite输出二进制图像的方法输出验证码。
在开发图形验证码时,首先生成验证码,然后绘制成图像,最后通过该方法输出到页面中。所以熟练地掌握该方法可以为以后开发图形验证码奠定基础。首先定义个字符串数组,随机去除一个用来做验证码。根据字符串长度创建一个画布Bitmap,接着在Bitmap对象上绘制边框,背景颜色,背景噪音线和前景噪音线,并且将绘制后的二进制图像保存到内存流中,最后通过Response对象的BinaryWrite方法输出到浏览器中。代码如下
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Drawing; 8 using System.Drawing.Drawing2D; 9 using System.Drawing.Imaging; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 //生成随机生成器 16 Random random = new Random(); 17 //成语字符串数组,随机去除创建验证码 18 string[] str = { "海阔天高", "望子成龙", "守株待兔", "国足无敌", "点石成金", "天涯明月", "尧尧无敌", "一望无际" }; 19 //string checkCode = "海阔天高"; 20 int count = random.Next(str.Length); 21 string checkCode = str[count]; 22 //根据字符串长度创建一个Bitmap画布 23 Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 20.5)), 22); 24 Graphics g = Graphics.FromImage(image); 25 try 26 { 27 g.Clear(Color.White);//清空图片背景色 28 for (int i = 0; i < 2; i++)//生成两条随机的噪音线 29 { 30 int x1 = random.Next(image.Width); 31 int x2 = random.Next(image.Width); 32 int y1 = random.Next(image.Height); 33 int y2 = random.Next(image.Height); 34 g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); 35 } 36 Font font = new Font("Arial", 12, (FontStyle.Bold));//定义字体 37 LinearGradientBrush brush = new LinearGradientBrush( 38 new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); 39 g.DrawString(checkCode, font, brush, 2, 2); 40 //画图片前景噪音点 41 for (int i = 0; i < 100; i++) 42 { 43 int x = random.Next(image.Width); 44 int y = random.Next(image.Height); 45 image.SetPixel(x, y, Color.FromArgb(random.Next())); 46 } 47 //画图片边框线 48 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); 49 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 50 image.Save(ms, ImageFormat.Gif); 51 Response.ClearContent(); 52 Response.ContentType = "image/Gif"; 53 Response.BinaryWrite(ms.ToArray()); 54 } 55 finally 56 { 57 g.Dispose(); 58 image.Dispose(); 59 } 60 } 61 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?