验证码生成:ValiImage.ashx
using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Drawing;
using System.IO;
using System.Web.SessionState;
namespace TestWeb
{
/// <summary>
/// 简单的验证码
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ValiImage : IHttpHandler,IRequiresSessionState
{
#region 全局变量
private int imgWidth = 0;
private int imgHeight = 0;
private int templength = 0;
private string tempString = string.Empty;
private static Random rand = new Random();
#endregion
public ValiImage()
{
imgWidth = 120;
imgHeight = 30;
templength = 10;
tempString = "abcdefghijklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/JPEG";
DrawImage();
}
//生成随即文字
public string GetRandString()
{
string retrunString = string.Empty;
for (int i = 0; i < templength; i++)
{
retrunString += tempString[rand.Next(tempString.Length)];
i++;
}
//寫入session
HttpContext.Current.Session["ValiString"] = retrunString;
HttpContext.Current.Request.Cookies.Remove("ValiString");
//寫入Cookie
HttpCookie valiCookie = new HttpCookie("ValiString", retrunString);
valiCookie.Expires = DateTime.Now.AddHours(2);
HttpContext.Current.Response.Cookies.Add(valiCookie);
return retrunString;
}
//绘出图片
public void DrawImage()
{
Bitmap bitmap = new Bitmap(imgWidth, imgHeight);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.Clear(Color.White);
//字體與大小
Font font = new Font("Arial", 24.0f);
graphics.DrawString(GetRandString(), font, Brushes.Gray, 1.0f, 1.0f);
//噪点
for (int i = 0; i < 100; i++)
{
graphics.FillEllipse(Brushes.LightSalmon, rand.Next(imgWidth), rand.Next(imgHeight), 2, 2);
}
//法线
for (int i = 0; i < 10; i++)
{
Point[] linePoint = new Point[]
{
new Point(rand.Next(imgWidth),rand.Next(imgHeight)),
new Point(rand.Next(imgWidth),rand.Next(imgHeight)),
new Point(rand.Next(imgWidth),rand.Next(imgHeight)),
new Point(rand.Next(imgWidth),rand.Next(imgHeight)),
new Point(rand.Next(imgWidth),rand.Next(imgHeight))
};
graphics.DrawLines(Pens.LightBlue, linePoint);
i++;
}
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.Save();
MemoryStream ms = new MemoryStream();
bitmap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
//http方式輸出图片
HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());
ms.Flush();
ms.Dispose();
font.Dispose();
bitmap.Dispose();
graphics.Flush();
graphics.Dispose();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
页面使用:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestWeb._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<img src="valiimage.ashx?<%Response.Write(DateTime.Now.Ticks);%>" οnclick="this.src = 'valiimage.ashx?'+Math.random();" />
</div>
</form>
</body>
</html>