软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 网络编程 > ASP教程 > HttpHandler应用之创建图片校验码

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/

    相关阅读
    网友评论