ASP.NET 生成图片验证码
来源:互联网 发布:windows route 编辑:程序博客网 时间:2024/06/05 21:37
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
//设置不缓存此页
Response.AppendHeader("pragma", "no-cache");
Response.AppendHeader("Cache-Control", "no-cache, must-revalidate");
Response.AppendHeader("expires", "0");
Random rand = new Random();
//获取随机字符
string str = GetRandString(4);
//创建画板
Bitmap image = new Bitmap(80, 26);
Graphics g = Graphics.FromImage(image);
//g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.InterpolationMode = InterpolationMode.Low;
//g.CompositingMode = CompositingMode.SourceOver;
//g.CompositingQuality = CompositingQuality.HighQuality;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.SmoothingMode = SmoothingMode.AntiAlias;
//绘制渐变背景
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
Brush brushBack = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(150, 256), 255, 255), Color.FromArgb(255, rand.Next(150, 256), 255), rand.Next(90));
g.FillRectangle(brushBack, rect);
//绘制干扰曲线
for (int i = 0; i < 2; i++)
{
Point p1 = new Point(0, rand.Next(image.Height));
Point p2 = new Point(rand.Next(image.Width), rand.Next(image.Height));
Point p3 = new Point(rand.Next(image.Width), rand.Next(image.Height));
Point p4 = new Point(image.Width, rand.Next(image.Height));
Point[] p = { p1, p2, p3, p4 };
Pen pen = new Pen(Color.Gray, 1);
g.DrawBeziers(pen, p);
}
//逐个绘制文字
for (int i = 0; i < str.Length; i++)
{
string strChar = str.Substring(i, 1);
int deg = rand.Next(-15, 15);
float x = (image.Width / str.Length / 2) + (image.Width / str.Length) * i;
float y = image.Height / 2;
//随机字体大小
Font font = new Font("Consolas", rand.Next(16, 24), FontStyle.Regular);
SizeF size = g.MeasureString(strChar, font);
Matrix m = new Matrix();
//旋转
m.RotateAt(deg, new PointF(x, y), MatrixOrder.Append);
//扭曲
m.Shear(rand.Next(-10, 10) * 0.03f, 0);
g.Transform = m;
//随机渐变画笔
Brush brushPen = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(0, 256), 0, 0), Color.FromArgb(0, 0, rand.Next(0, 256)), rand.Next(90));
g.DrawString(str.Substring(i, 1), font, brushPen, new PointF(x - size.Width / 2, y - size.Height / 2));
g.Transform = new Matrix();
}
g.Save();
Response.ContentType = "image/jpeg";
Response.Clear();
Response.BufferOutput = true;
image.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
image.Dispose();
Response.Flush();
}
//获取随机数
private string GetRandString(int len)
{
//string s = "0123456789";
string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string str = "";
Random r = new Random();
for (int i = 0; i < len; i++)
{
str += s.Substring(r.Next(s.Length), 1);
}
return str;
}
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
//设置不缓存此页
Response.AppendHeader("pragma", "no-cache");
Response.AppendHeader("Cache-Control", "no-cache, must-revalidate");
Response.AppendHeader("expires", "0");
Random rand = new Random();
//获取随机字符
string str = GetRandString(4);
//创建画板
Bitmap image = new Bitmap(80, 26);
Graphics g = Graphics.FromImage(image);
//g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.InterpolationMode = InterpolationMode.Low;
//g.CompositingMode = CompositingMode.SourceOver;
//g.CompositingQuality = CompositingQuality.HighQuality;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
g.SmoothingMode = SmoothingMode.AntiAlias;
//绘制渐变背景
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
Brush brushBack = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(150, 256), 255, 255), Color.FromArgb(255, rand.Next(150, 256), 255), rand.Next(90));
g.FillRectangle(brushBack, rect);
//绘制干扰曲线
for (int i = 0; i < 2; i++)
{
Point p1 = new Point(0, rand.Next(image.Height));
Point p2 = new Point(rand.Next(image.Width), rand.Next(image.Height));
Point p3 = new Point(rand.Next(image.Width), rand.Next(image.Height));
Point p4 = new Point(image.Width, rand.Next(image.Height));
Point[] p = { p1, p2, p3, p4 };
Pen pen = new Pen(Color.Gray, 1);
g.DrawBeziers(pen, p);
}
//逐个绘制文字
for (int i = 0; i < str.Length; i++)
{
string strChar = str.Substring(i, 1);
int deg = rand.Next(-15, 15);
float x = (image.Width / str.Length / 2) + (image.Width / str.Length) * i;
float y = image.Height / 2;
//随机字体大小
Font font = new Font("Consolas", rand.Next(16, 24), FontStyle.Regular);
SizeF size = g.MeasureString(strChar, font);
Matrix m = new Matrix();
//旋转
m.RotateAt(deg, new PointF(x, y), MatrixOrder.Append);
//扭曲
m.Shear(rand.Next(-10, 10) * 0.03f, 0);
g.Transform = m;
//随机渐变画笔
Brush brushPen = new LinearGradientBrush(rect, Color.FromArgb(rand.Next(0, 256), 0, 0), Color.FromArgb(0, 0, rand.Next(0, 256)), rand.Next(90));
g.DrawString(str.Substring(i, 1), font, brushPen, new PointF(x - size.Width / 2, y - size.Height / 2));
g.Transform = new Matrix();
}
g.Save();
Response.ContentType = "image/jpeg";
Response.Clear();
Response.BufferOutput = true;
image.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
image.Dispose();
Response.Flush();
}
//获取随机数
private string GetRandString(int len)
{
//string s = "0123456789";
string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string str = "";
Random r = new Random();
for (int i = 0; i < len; i++)
{
str += s.Substring(r.Next(s.Length), 1);
}
return str;
}
</script>
转载:http://www.cnblogs.com/zjfree/archive/2012/01/10/2318376.html
0 0
- asp.net如何生成图片验证码
- asp.net生成验证码图片
- asp.net生成验证码图片
- asp.net生成验证码图片
- asp.net如何生成图片验证码
- asp.net生成图片验证码
- Asp.Net生成图片验证码(vb)
- asp.net如何生成图片验证码
- ASP.NET 生成图片验证码
- ASP.NET随机生成验证码图片
- asp.net 生成图片验证码
- ASP.NET 生成图片验证码
- asp.net如何生成图片验证码(简单)
- asp.net如何生成图片验证码(简单)
- asp.net如何生成图片验证码(简单)
- asp.net如何生成图片验证码(简单)
- asp.net如何生成图片验证码(简单)
- asp.net如何生成图片验证码(简单)
- kvm跨物理机迁移的过程
- ContenProvider(非常详细,非常好)
- SUSE Linux Enterprise 12 系统安装
- jquery.form.js处理成功但未执行回调
- nyoj 1011 So Easy[II](求多变形的面积)
- ASP.NET 生成图片验证码
- 自定义View解析之自定义View实战(四)
- 动态规划 Problem C
- eclipse如何使用快捷键实现编辑窗口放大还原
- 解决:no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
- 在linux中 apache 重写失效(各种模块都开了不启作用。 httpd.conf中是否加载其它配置文件
- maven install
- Ubuntu 14.04 邮件服务器配置
- 观光旅游 最短路 floyd