protected void Page_Load(object sender, EventArgs e)
{
//生成验证码图片的基本步骤
string checkCode = "新年快乐";
//定义画布大小
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 20.5)), );
//指定绘制类型
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
}
//指定字体/字号/样式
Font font = new System.Drawing.Font("Arial", , (System.Drawing.FontStyle.Bold));
//指定画笔, 线性渐变
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, , );
//画图片的前景噪音点
for (int i = ; i < ; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//将绘制的图片以指定的格式保存到内存中
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
//清除缓存
Response.ClearContent();
//指定输出类型
Response.ContentType = "image/Gif";
//以二进制方式输出
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
} }

最终效果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAAAXCAIAAAD4GeQtAAAEtklEQVRYheVYyw3sNgycTvw7+sha1ALrcBtsgbXMVfUwB0m2tf7sviAIAoQwDNkrUSSHHMoLOpn5f7vP8wxmxp1wE2YBaPn293ehwgQm/idrNhWoJDteuQlEoZE6I623mZucH2W99+iY75znGeb2MklBbKctN+yLAQoMoPjnTnQKTHpzFfcGoblKN4VqFywqVBOZ34x8E1cFFHLG7xFzOoGQRAYBAtRUBlYcBiigPuJJK4C3S52WyljPd/WQpMe6rb48JJtCNdkXEIMGmNMSFFJcrQ4D5mSCbYcOcxvHEbwgFhGRQxG7EYYAaBHhxLPPACOCmwmoR4xrIL5WTcV8Y7gKVFHvClVIvSfVq8HZDKKQcOMPtcnMZVk6zHmqMW7UZBYRHgCl5LyHgC/Vq1kEJqcCkSTF87qN6/3KiN1hO/S3WERE0KCKW/xNIXo2PkHTY6LQuSzLW50XJwkBWNVkAtTtaQUVlMuWV8y5fcyhraSbliqASpmQadCmkAa599yL5ycIN/mIxWFMKDOnaQIziQ4HBYEAKAgk7o97wQsI0LwMTFpcbLXCDgrTtSt1ZraxCoyrdUa5Ccy8/CpctbrhJpCWAs+Yu+oxLSKCCda/6cLsHIbhoc4jzBERllqF1z1anWfqXgIfkkNP4fihzkmoJF5SPcJNvHIeHE+YF4TNO8wNeNqRuXj+0M+L2EpBHCpyq/NMuUvsorn3PLBJeWQ6Nd6mE24AkCTcBKrJdm6TE71ZaiRXHg+TrL2sF90asReGhwF14BERfOR2j5beAdTetmd4q3OeW72hj9efYA60xW5I1mPenH/mVMkabp8lXbPgZr45K8N9wTwRiGOGs57qarZfyCziirnBJMttvzncjqBrB2aEpb2ffW3poTBrOc+EAr5Br/tWhnvi9kJs0s4tpZMxdZ4jdQqtEp4JKP1h5nyZo1Gdnv0RN2l1rlkqpSXSVSCfNHzpjpXPAfWCOcxLCPAB/hvm5RinXjEvNG45mCgtBQTkS3PuImKCjszPUGPds13ljPmmAjXnayePfa1CbD8IF8xziQgMouczXO1qJT36g7Gl4IqIaIdzAahJAAICAFCAAkUThuBepKH9JtHOcJWEUpfk3PTtGOt67efWtUMYULlgRf1ieTq3Ww3BUeeWeOYtBXGp81vZMQegCdcJCIko3Vsth27BpAJljgYImap7dj7qB7kKV7Wep7kdmJfQGHDEsWH+WeeKsBy2tgNMKrpahVddpau9OpwUq7VsV8GNz525DXNLl8Ye0XK+FPOeC6InDmulXvpZx6lM2KPzE7dr7cOlpUVE+4zJxB2333oEmOSj+VvWiNBLHCrOQcH9h4eATKKJX3Z10b6wd8FqcXylXvq5bV94SyHvEw5b49eZ/6Z8wfw33v6Pip7KUC7/anzp5/+wPH8z/i7Wd6a/rYe+f6s56WYP/9fdvbfPN68Dy6RfltzfjZnWxnaosuPeG2Dntfuj26cZVW2dM88zxnGcpmlZlnmep2ma53kYhnme53kex3FZlmmapmkax3F/PwxDmV9+LQuLLMtyVljG+5xhGMq4aD5vumvete027Hr2aeVlmT+OY9G2L9zN27WVx7OdwzD8BSYcbuveQkhwAAAAAElFTkSuQmCC" alt="" />

public partial class _Default : System.Web.UI.Page
{
/// <summary>
/// 生成随机数字符串, 并保存到Cookie中
/// </summary>
/// <returns></returns>
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
Random random = new Random();
for (int i = ; i < ; i++)
{
number = random.Next();
if (number % == )
code = (char)('' + (char)(number % ));
else
code = (char)('A' + (char)(number % ));
checkCode += code.ToString();
}
Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
return checkCode;
} protected void Page_Load(object sender, EventArgs e)
{
string checkCode = GenerateCheckCode();
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 13.3)), );
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = ; i < ; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Arial", , (System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, , );
//画图片的前景噪音点
for (int i = ; i < ; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
} }
}

最终结果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAXCAIAAAAgFUAnAAADRElEQVRIic1XyxHkKgzsTOzBRx8VCykoDtJQCsTSV+LRHvj4x8zO1L7DU7lcGAu53YJGgJks/D/fl2UBC/1H04TzI7KNNmNrI2p3ls/RsNuHt8x8vV6w/NbJ0uUVgHeew8T1rz6Hc/qErxoLt21rXEo5Dcbbwe+A0n9OyJdm2UIIYP7tA1Ogkj+llfkgmPHbDynE3VkYQrjPS4sEiNRdd3F3S7RIgUluQJkpsHalHqFQoXBoPlBZVIVKZHuEKIS7KWRcgmb334OxcF3Xx7zMDhC4prBQQAF1dwOZ7IB4BcqiChNYfUaCQBVqpYOGKlQh/d4uvskG84xLL94A5VNnJkCJpLs7FZTM9uuZAjOXEw4TqCZ2TKaJnSwRiELtFJxJuFOhLG4PwbGmRHnQ0BoW/Zx0d7d4wt1yTbY5WmEZ3QFxd8+mMIEKTKECEUCbMFXc45c60CgKmapNU6KJXjbmetJ7um+hqwF6Bg2ASQRaEy1X2vq8vHW6Z1GIxhnKYiGEmV4Wt6IYsC7pbiZFNFqHaAIB4D5CUSuR8UbBnEvPphDd7eZtCZd5qddwtlPgNcW2H+nGxcQaRArA/aTnyTqXxg4I2Q6UNy6LKmSq0iw145n6VMBMgIgOqEcH7KEUVDQxGtGrgyYq6krXB50943cudcql4N0ab98zgExqkQKRhxRbtDEd66MXc3dALKokk0jPxmzXWTjnknvtpLszXzhjscblE6X3dY2nKrkztWU+WU+5om/ImHrebyjPA3OTT85W5ycuJUqXdw7CmhXqEPMiQ9itVBBGV8GQ6CbjXfZbxs96jp2DyAu+Xf3YIfsal1sFVVxBuQqnu2tbLuPeLhYfexJP231Nes/7GeXAOmdxcNnqS03zpLs7D1Zcy9GW/m8fqocD6KyCfIjUGwDFLnvPf2XINkqkb0rSz8Z8qi+b7fOg810hE5iUCHYtzv8R6FG58Ub+/kO9PTXEBlSiuDsAyR8HvLe+xvs5yO536+cju56Y7ItT1cmnBpzEud67w/CsGKyeKJZlCSGEEJZl2bYthLBt2+v1CiG8um3btq5rbYQQanv4LMtS2+u6bttWfWrPiDyi1Z51XUec4VY7q/+6rjVaHfgHxETn++8g9BUAAAAASUVORK5CYII=" alt="" />

012. asp.net生成验证码图片(汉字示例/字母+数字)的更多相关文章

  1. java web学习总结(九) -------------------通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  2. JavaWeb---总结(九)通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片  1 package gacl. ...

  3. javaweb学习总结(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  4. java web 学习九(通过servlet生成验证码图片)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  5. 通过Servlet生成验证码图片

    原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...

  6. javaWeb学习总结(3)- 通过Servlet生成验证码图片(2)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  7. 通过Servlet生成验证码图片(转)

    原文地址:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...

  8. javaweb(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  9. 转: 通过Servlet生成验证码图片

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)—— 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...

随机推荐

  1. @synthesize的使用

    利用@synthesize可以给在.m文件中给.h文件中的属性重新定义新的名称如 @synthesize firstname = anothername:firstname是在.h文件中定义的,新定义 ...

  2. 解决关于打开plist文件乱码问题,plist转换为xml文件的txt文件!

    自己是程序员,干嘛不自己写代码完成?下载工具还不一定管用!具体解决方案如下: 1,获得内容 NSArray *dictionary = [NSArray arrayWithContentsOfFile ...

  3. 如何编写一个编译c#控制台应用程序的批处理程序

    如何编写一个编译c#控制台应用程序的批处理程序 2011-03-22 18:14 dc毒蘑菇 | 浏览 579 次 最近在网上看了一个教程,是学C#的,但是我的机子上装不上vs,所以想写一个批处理来编 ...

  4. 换个心境搞IT,在IT职场如何打拼?

    刚进入IT这行时,我也是从程序员做起.尤其是前两三个月里,那种感觉就像时时刻刻处于备战状态一样.我是一个在对自己的要求方面有洁癖的人,在没有任何经验的状态下,只有坚持苦干,把下发的每件编程任务做好,才 ...

  5. mark资料-selenium断言的分类

    操作(action).辅助(accessors)和断言(assertion): 操作action: 模拟用户与 Web 应用程序的交互. 辅助accessors: 这是辅助工具.用于检查应用程序的状态 ...

  6. TCP的分层结构

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务 ...

  7. #include #import @class 的一些用法区别

    从网上查了一些资料,整理了一下,发现很多都说的比较详尽,下面摘录自网络 说一下#import同class之间的区别 在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明 ...

  8. 最最实用的30个Linux命令!

    本文中将介绍一些实用又常用的Linux或Unix命令,这些是Linux系统管理员们平常使用的命令.本文不是什么完整列表,而是简要地列出了需要时派得上用场的命令,下面开始逐一介绍如何使用这些命令并附有示 ...

  9. 关于java“配置环境变量”的那些事

    我们刚开始学习java,都会面临编程路上的第一个小怪兽:配环境变量. 网上很多教程给了我们很多的参考,但我们是否有想过为什么要这么配呢?下面我就是想重点探讨一下为什么?并且希望以后你们不但能配,还知道 ...

  10. 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...