是一个生成动态验证码的,谁能改成一个aspx文件执行的主要是生成gif动画的
namespace Kissogram.Common.Security
{
    using System;
    using System.IO;
    using System.Web;
    using System.Drawing;    //GIF验证码类
    public class Validate
    {
        //设置最少4位验证码
        private byte TrueValidateCodeCount = 4;
        public byte ValidateCodeCount
        {
            get
            {
                return TrueValidateCodeCount;
            }
            set
            {
                //验证码至少为3位
                if (value > 4)
                    TrueValidateCodeCount = value;
            }
        }
        protected string ValidateCode = "";
        //是否消除锯齿
        public bool FontTextRenderingHint = false;
        //验证码字体
        public string ValidateCodeFont = "Arial";
        //验证码型号(像素)
        public float ValidateCodeSize = 13;
        public int ImageHeight = 23;
        //定义验证码中所有的字符
        public string AllChar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";        //获得随机四位数
        private void CreateValidate()
        {
            ValidateCode = "";
            //将验证码中所有的字符保存在一个字符串数组中
            string[] CharArray = AllChar.Split(',');
            int Temp = -1;
            //生成一个随机对象
            Random RandCode = new Random();
            //根据验证码的位数循环
            for (int i = 0; i < ValidateCodeCount; i++)
            {
                //主要是防止生成相同的验证码
                if (Temp != -1)
                {
                    //加入时间的刻度
                    RandCode = new Random(i * Temp * ((int)DateTime.Now.Ticks));
                }
                int t = RandCode.Next(35);
                if (Temp == t)
                {
                    //相等的话重新生成
                    CreateValidate();
                }
                Temp = t;
                ValidateCode += CharArray[Temp];
            }
            //错误检测,去除超过指定位数的验证码
            if (ValidateCode.Length > TrueValidateCodeCount)
                ValidateCode = ValidateCode.Remove(TrueValidateCodeCount);
        }
        //生成一帧的BMP图象
        private void CreateImageBmp(out Bitmap ImageFrame)
        {
            //获得验证码字符
            char[] CodeCharArray = ValidateCode.ToCharArray(0, ValidateCodeCount);
            //图像的宽度-与验证码的长度成一定比例
            int ImageWidth = (int)(TrueValidateCodeCount * ValidateCodeSize * 1.3 + 4);
            //创建一个长20,宽iwidth的图像对象
            ImageFrame = new Bitmap(ImageWidth, ImageHeight);
            //创建一个新绘图对象
            Graphics ImageGraphics = Graphics.FromImage(ImageFrame);
            //清除背景色,并填充背景色
            //Note:Color.Transparent为透明
            ImageGraphics.Clear(Color.White);
            //绘图用的字体和字号
            Font CodeFont = new Font(ValidateCodeFont, ValidateCodeSize, FontStyle.Bold);
            //绘图用的刷子大小
            Brush ImageBrush = new SolidBrush(Color.Red);
            //字体高度计算
            int FontHeight = (int)Math.Max(ImageHeight - ValidateCodeSize - 3, 2);
            //创建随机对象
            Random rand = new Random();
            //开始随机安排字符的位置,并画到图像里
            for (int i = 0; i < TrueValidateCodeCount; i++)
            {
                //生成随机点,决定字符串的开始输出范围
                int[] FontCoordinate = new int[2];
                FontCoordinate[0] = (int)(i * ValidateCodeSize + rand.Next(1)) + 3;
                FontCoordinate[1] = rand.Next(FontHeight);
                Point FontDrawPoint = new Point(FontCoordinate[0], FontCoordinate[1]);
                //消除锯齿操作
                if (FontTextRenderingHint)
                    ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
                else
                    ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                //格式化刷子属性-用指定的刷子、颜色等在指定的范围内画图
                ImageGraphics.DrawString(CodeCharArray.ToString(), CodeFont, ImageBrush, FontDrawPoint);
            }
            ImageGraphics.Dispose();
        }
        //处理生成的BMP
        private void DisposeImageBmp(ref Bitmap ImageFrame)
        {
            //创建绘图对象
            Graphics ImageGraphics = Graphics.FromImage(ImageFrame);
            //创建铅笔对象
            Pen ImagePen = new Pen(Color.Red, 1);
            //创建随机对象
            Random rand = new Random();
            //创建随机点
            Point[] RandPoint = new Point[2];
            //随机画线
            for (int i = 0; i < 15; i++)
            {
                RandPoint[0] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height));
                RandPoint[1] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height));
                ImageGraphics.DrawLine(ImagePen, RandPoint[0], RandPoint[1]);
            }
            ImageGraphics.Dispose();
        }
        //创建GIF动画
        private void CreateImageGif()
        {
            Bitmap ImageFrame;
            Kissogram.Drawing.Gif.AnimatedGifEncoder GifPic = new Kissogram.Drawing.Gif.AnimatedGifEncoder();
            MemoryStream BmpMemory = new MemoryStream();
            GifPic.Start();
            //确保视觉残留
            GifPic.SetDelay(5);
            //-1:no repeat,0:always repeat
            GifPic.SetRepeat(0);
            for (int i = 0; i < 20; i++)
            {
                //创建一帧的图像
                CreateImageBmp(out ImageFrame);
                //生成随机线条
                DisposeImageBmp(ref ImageFrame);
                //输出绘图,将图像保存到指定的流
                ImageFrame.Save(BmpMemory, System.Drawing.Imaging.ImageFormat.Png);
                GifPic.AddFrame(Image.FromStream(BmpMemory));
                BmpMemory = new MemoryStream();
            }
            GifPic.OutPut(ref BmpMemory);
            HttpContext.Current.Response.ClearContent();
            //配置输出类型
            HttpContext.Current.Response.ContentType = "image/Gif";
            //输出内容
            HttpContext.Current.Response.BinaryWrite(BmpMemory.ToArray());
            BmpMemory.Close();
            BmpMemory.Dispose();
        }
        //输出验证码
        public void OutPutValidate(string ValidateCodeSession)
        {
            CreateValidate();
            CreateImageGif();
            //把生成的验证码输入到SESSION
            HttpContext.Current.Session[ValidateCodeSession] = ValidateCode;
        }
    }
}

解决方案 »

  1.   

    public class AnimatedGifEncoder
    {
        // Fields
        protected int colorDepth;
        protected byte[] colorTab;
        protected int delay;
        protected int dispose;
        protected bool firstFrame;
        protected int height;
        protected Image image;
        protected byte[] indexedPixels;
        protected MemoryStream Memory;
        protected int palSize;
        protected byte[] pixels;
        protected int repeat;
        protected int sample;
        protected bool sizeSet;
        protected bool started;
        protected int transIndex;
        protected Color transparent;
        protected bool[] usedEntry;
        protected int width;    // Methods
        public AnimatedGifEncoder();
        public bool AddFrame(Image im);
        protected void AnalyzePixels();
        protected int FindClosest(Color c);
        protected void GetImagePixels();
        public void OutPut(ref MemoryStream MemoryResult);
        public void SetDelay(int ms);
        public void SetDispose(int code);
        public void SetFrameRate(float fps);
        public void SetQuality(int quality);
        public void SetRepeat(int iter);
        public void SetSize(int w, int h);
        public void SetTransparent(Color c);
        public void Start();
        protected void WriteGraphicCtrlExt();
        protected void WriteImageDesc();
        protected void WriteLSD();
        protected void WriteNetscapeExt();
        protected void WritePalette();
        protected void WritePixels();
        protected void WriteShort(int value);
        protected void WriteString(string s);
    }