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. Nginx 安装编译配置

    ./configure --prefix=/usr/local/nginx-1.8.0 --with-http_ssl_module --with-http_spdy_module --with-ht ...

  2. 《Programming with Objective-C》的常规规定

    1.每个类的类名在软件中必须唯一的(包括在框架.bounds中),类名有多个单词的时候就是用驼峰方法. Prefix Framework NS Foundation (OS X and iOS) an ...

  3. Intellij IDEA Help

    https://www.jetbrains.com/idea/help/intellij-idea.html https://www.jetbrains.com/idea/help/creating- ...

  4. MongoDB索引、聚合

    用$where可以执行任意的js作为查询的一部分. db.foo.find({"$where" : function(){          for(var current in ...

  5. Cisco ASA 5505 Routing Between Two (Internal) VLANS

    Referenced:http://www.petenetlive.com/KB/Article/0000869 Problem I had to set this up for a client t ...

  6. Java 集合深入理解(6):AbstractList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情比天蓝,来学学 AbstractList 吧! 什么是 AbstractList AbstractList 继承自 ...

  7. Java 集合源码解析(2):ListIterator

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情和股票一样红,还是学学 ListIterator 吧! ListIterator 根据官方文档介绍, ListIt ...

  8. MyBatis对应的xml的数据类型

    MyBatis对应的xml的数据类型 JDBC Type Java TypeCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.B ...

  9. lanuchy快捷操作

    down arrow: display history shift+delete: remove the item from the distory

  10. Windows server上rsync的安装和使用

    获取和安装 首先从rsync官网下载软件的安装版本,注意这里要下的是客户端版本,而非服务端版本. 下载完成之后,双击"cwRsync_4.0.5_Installer.exe"图标, ...