HttpHandler应用之创建图片校验码

HttpHandler 可以直接写入一个 .ashx 而不需要被编译。顺便说下ashx 文件是用于写web handler的。一般用来处理生成动态图片、生成动态文本等不需要回传处理的任务。OK,不多废话,步入正题。下面在 .ashx 中构造一个图像生成器来创建校验码,它用来防止 Web 应用程序中的自动注册。先看代码:

Image.ashx: Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] <%@ WebHandler Language="C#" CodeBehind="Image.ashx.cs" Class="HttpHandlerDemo.Image" %>

Image.ashx.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Drawing;

using System.Text;

using System.Drawing.Imaging;

namespace HttpHandlerDemo

{

/// <summary>

/// 图像生成器,用于创建图片校验码

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Image : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "image/gif";

Bitmap b = new Bitmap(200, 60);

Graphics g = Graphics.FromImage(b);

g.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);

Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);

Random r = new Random();

string letters = "ABCDEFGHRJKLMNOPQRSTUVWXYZ";

string letter;

StringBuilder s = new StringBuilder();

//随机生成字母,基于字母使用 Graphics 类生成位图

for (int i = 0; i < 5; i++)

{

letter = letters.Substring(r.Next(0, letters.Length - 1), 1);

s.Append(letter);

g.DrawString(letter, font, new SolidBrush(Color.Black), i * 38, r.Next(0, 16));

}

//在已生成的随机字母位图上画随机线条

Pen linePen = new Pen(new SolidBrush(Color.Black), 2);

for (int i = 0; i < 6; i++)

{

g.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));

}

b.Save(context.Response.OutputStream, ImageFormat.Gif);

//context.Session["pfregisterimage"] = s.ToString();

context.Response.End();

}

public bool IsReusable

{

get

{

return true;

}

}

}

}

生成效果图



主要操作都是在 ProcessRequest() 方法中完成的。首先随机生成一个五个字母的字符串,基于这些字母使用 Drawing 命名空间下的各个类生成位图,将字母随机摆放。然后在位图上画一些随机线条,使计算机难以识别。

最终将图片以 GIF 文件的形式保存并发总给 Response 对象的 OutputStream 。 可以将随机生成的字母保存到 Session 中,当用户输入完验证码,窗体会送时,将 Session 中的值和用户的输入比较,确认用户是人工输入。

出处:http://www.cnblogs.com/heyCoding/

转载请注明:代码家园 » HttpHandler应用之创建图片校验码

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)