使用ashx文件生成验证码图片

 在vs2005中可以直接创建.ashx文件,其项目叫做一般处理程序,.ashx文件一般用来处理只有返回,二一般不回传的数据,比如动态生成图片,或者文字,以下为清清月儿博客上转载的一个用ashx动态生成验证码图片的代码。

//绘制验证码图片ValidateImageHandler.ashx

1 <%@ WebHandler Language="C#" Class="ValidateImageHandler" %>
 2 
 3 using System;
 4 using System.Web;
 5 using System.Web.SessionState;
 6 using System.Drawing;
 7 using System.Drawing.Imaging;
 8 using System.Text;
 9 
10 /// <summary>
11 /// ValidateImageHandler 生成网站验证码功能
12 /// </summary>
13 public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
14 {
15     int intLength = 5;               //长度
16     string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中
17     public ValidateImageHandler()
18     {        
19     }
20 
21     /// <summary>
22     ///  生成验证图片核心代码
23     /// </summary>
24     /// <param name="hc"></param>
25     public void ProcessRequest(HttpContext hc)
26     {
27         //设置输出流图片格式
28         hc.Response.ContentType = "image/gif";
29         
30         Bitmap b = new Bitmap(200, 60);
31         Graphics g = Graphics.FromImage(b);
32         g.FillRectangle(new SolidBrush(Color.YellowGreen), 0, 0, 200, 60);
33         Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
34         Random r = new Random();
35 
36         //合法随机显示字符列表
37         string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
38         StringBuilder s = new StringBuilder();
39         
40         //将随机生成的字符串绘制到图片上
41         for (int i = 0; i < intLength; i++)
42         {
43             s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
44             g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
45         }
46 
47         //生成干扰线条
48         Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
49         for (int i = 0; i < 10; i++)
50         {
51             g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
52         }
53         b.Save(hc.Response.OutputStream, ImageFormat.Gif);
54         hc.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否一致
55         hc.Response.End();
56    
57     }
58     
59     /// <summary>
60     /// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
61     /// </summary>
62     public bool IsReusable
63     {
64         get
65         {
66             return true;
67         }
68     }
69 }

//前台代码中引用ashx文件

.....

 <img width="100px" height="25px" src="ValidateImageHandler.ashx"/>

....

这里因为使用的是默认 *.asah处理文件类型,在machine.config文件中已经有此类型的默认注册,

 因为这里不需要注册

 

1 <httpHandlers>
2   <add verb="*" path="*.asah" type="System.Web.UI.SimpleHandlerFactory" />
3 </httpHandlers>

 注意:

1.再注册一下也不会出错,会覆盖machine.config文件配置

2.如果在同一个配置文件中注册多次,默认后者也会覆盖前者.

3.如果其它格式(系统默认没有注册)的,务必要在Web.config文件中注册一下.

文章来源:http://computer.mblogger.cn/messiah001/posts/81311.aspx

如果认为此文对您有帮助,别忘了支持一下哦!

作者:齐飞

来源:http://youring2.cnblogs.com/

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2009/04/03/1428661.html

时间: 2024-12-02 00:57:04

使用ashx文件生成验证码图片的相关文章

php生成验证码图片从入门和精通教程

在php中要生成验证码图片是相当的简单的,因为在php中为我们提供了图形gd.dll库,要启用gd图形库我们只要在在php.ini中把php-gd前面的;去就可以了. 方法一 $authnum=''; $ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; $list=explode(",",$ychar);//分割函数 for($i=0;$i<4;$i

PHP文件生成的图片无法使用CDN缓存的解决方法

  这篇文章主要介绍了PHP文件生成的图片无法使用CDN缓存的解决方法,这里的PHP生成图片是指src地址是一个PHP文件的图片,如果不做CDN,服务器的压力会非常大,本文就讲解了如何加进CDN的方法,需要的朋友可以参考下 今天发现线上有个问题,线上一个图片域名,在前端已经加了CDN缓存,不落缓存,则用PHP动态实现图片缩放,但经PHP处理过的图片输出后,每次都要从后端读取,后端服务器压力瞬间增加,经分析,PHP中没有作304的处理, HTTP的原理是这样的,每次请求到服务器后,服务端检测有没有

C语言实现用随机字符串生成验证码图片

问题描述 C语言实现用随机字符串生成验证码图片 就是正常的验证码逻辑--随机生成一个四位字符串,然后用这个字符串加随机干扰像素随机位置随机颜色之类的信息生成一张验证码图片!!!求大神帮忙········(新人暂无法悬赏,后期一定补上) 解决方案 随机生成UUID的方法可以结合使用 #include <stdio.h> #include <stdlib.h> /** * Create random UUID * * @param buf - buffer to be filled w

WinForm生成验证码图片的方法_C#教程

本文实例讲述了WinForm生成验证码图片的方法.分享给大家供大家参考,具体如下: 1.创建ValidCode类: public class ValidCode { #region Private Fields private const double PI = 3.1415926535897932384626433832795; private const double PI2 = 6.283185307179586476925286766559; //private readonly int

Javaweb开发中通过Servlet生成验证码图片_java

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.response.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; i

PHP利用GD库画图和生成验证码图片

首先得确定php.ini设置有没有打开GD扩展功能,测试如下 print_r(gd_info()); 如果有打印出内容如下,则说明GD功能有打开: Array ( [GD Version] => bundled (2.0.34 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => 1 [GIF Read Support] => 1 [GIF Crea

加入干扰象素的生成验证码图片

        Header("Content-type: image/PNG");          srand((double)microtime()*1000000);         $im = imagecreate(58,25);         $black = ImageColorAllocate($im, 0,0,0);         $white = ImageColorAllocate($im, 255,255,255);         $gray = Ima

php生成验证码图片学习笔记

 代码如下 复制代码 header("Content-type:image/png"); set_time_limit(0);//设置PHP超时时间 $url = $_GET['url']; $url = "http://vcer.baidu.com/verify"; $imginfo = GetImageSize ( $url );   $imgw = $imginfo [0];   $imgh = $imginfo [1]; $bg = imagecreatet

php 复杂生成验证码图片

function image3($length=4,$type='png',$width=180,$height=60,$fontface='fpnf.ttf',$verifyName='verify') {         $code = $this->rand_string($length,4);         $width = ($length*25)>$width?$length*25:$width;         $authCode = new Zend_Session_Name