zoukankan      html  css  js  c++  java
  • 创建一个验证码图片类

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;
    using System.IO;
    
    namespace lishuhua
    {
    
        public partial class Validator : System.Web.UI.Page
        {
    
            protected void Page_Load(object sender, EventArgs e)
            {
                //GenerateValidateCode();
                GenerateVerifyImage(4);//GenerateVerifyImage(int length)
            }
    
            #region 【无刷新仿google波形扭曲彩色】验证码样式0___GenerateValidateCode()
            private void GenerateValidateCode()
            {
                this.Length = this.length;
                this.FontSize = this.fontSize;
                this.Chaos = this.chaos;
                this.BackgroundColor = this.backgroundColor;
                this.ChaosColor = this.chaosColor;
                this.CodeSerial = this.codeSerial;
                this.Colors = this.colors;
                this.Fonts = this.fonts;
                this.Padding = this.padding;
                string VNum = this.CreateVerifyCode(); //取随机码
                Session["ValidateCode"] = VNum.ToUpper();//取得验证码,以便后来验证
                this.CreateImageOnPage(VNum, this.Context); // 输出图片
                //Cookie验证模式, 使用Cookies取验证码的值
                //Response.Cookies.Add(new HttpCookie("CheckCode", code.ToUpper()));
            }
            #endregion
            #region 验证码长度(默认4个验证码的长度)
            int length = 4;
            public int Length
            {
                get { return length; }
                set { length = value; }
            }
            #endregion
            #region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)
            int fontSize = 22;
            public int FontSize
            {
                get { return fontSize; }
                set { fontSize = value; }
            }
            #endregion
            #region 边框补(默认1像素)
            int padding = 2;
            public int Padding
            {
                get { return padding; }
                set { padding = value; }
            }
            #endregion
            #region 是否输出燥点(默认不输出)
            bool chaos = true;
            public bool Chaos
            {
                get { return chaos; }
                set { chaos = value; }
            }
            #endregion
            #region 输出燥点的颜色(默认灰色)
            Color chaosColor = Color.LightGray;
            public Color ChaosColor
            {
                get { return chaosColor; }
                set { chaosColor = value; }
            }
            #endregion
            #region 自定义背景色(默认白色)
            Color backgroundColor = Color.White;
            public Color BackgroundColor
            {
                get { return backgroundColor; }
                set { backgroundColor = value; }
            }
            #endregion
            #region 自定义随机颜色数组
            Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
            public Color[] Colors
            {
                get { return colors; }
                set { colors = value; }
            }
            #endregion
            #region 自定义字体数组
            string[] fonts = { "Arial", "Georgia" };
            public string[] Fonts
            {
                get { return fonts; }
                set { fonts = value; }
            }
            #endregion
            #region 自定义随机码字符串序列(使用逗号分隔)
            string codeSerial = "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,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";
            public string CodeSerial
            {
                get { return codeSerial; }
                set { codeSerial = value; }
            }
            #endregion
            #region 产生波形滤镜效果
            private const double PI = 3.1415926535897932384626433832795;
            private const double PI2 = 6.283185307179586476925286766559;
            /// <summary>
            /// 正弦曲线Wave扭曲图片
            /// </summary>
            /// <param name="srcBmp">图片路径</param>
            /// <param name="bXDir">如果扭曲则选择为True</param>
            /// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>
            /// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>
            /// <returns></returns>
            public Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
            {
                Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
                // 将位图背景填充为白色
                System.Drawing.Graphics graph = Graphics.FromImage(destBmp);
                graph.FillRectangle(new SolidBrush(Color.White), 0, 0, destBmp.Width, destBmp.Height);
                graph.Dispose();
                double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
                for (int i = 0; i < destBmp.Width; i++)
                {
                    for (int j = 0; j < destBmp.Height; j++)
                    {
                        double dx = 0;
                        dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
                        dx += dPhase;
                        double dy = Math.Sin(dx);
                        // 取得当前点的颜色
                        int nOldX = 0, nOldY = 0;
                        nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
                        nOldY = bXDir ? j : j + (int)(dy * dMultValue);
                        System.Drawing.Color color = srcBmp.GetPixel(i, j);
                        if (nOldX >= 0 && nOldX < destBmp.Width
                        && nOldY >= 0 && nOldY < destBmp.Height)
                        {
                            destBmp.SetPixel(nOldX, nOldY, color);
                        }
                    }
                }
                return destBmp;
            }
            #endregion
            #region 生成校验码图片
            public Bitmap CreateImageCode(string code)
            {
                int fSize = FontSize;
                int fWidth = fSize + Padding;
                int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;
                int imageHeight = fSize * 2 + Padding;
                System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight);
                Graphics g = Graphics.FromImage(image);
                g.Clear(BackgroundColor);
                Random rand = new Random();
                //给背景添加随机生成的燥点
                if (this.Chaos)
                {
                    Pen pen = new Pen(ChaosColor, 0);
                    int c = Length * 10;
                    for (int i = 0; i < c; i++)
                    {
                        int x = rand.Next(image.Width);
                        int y = rand.Next(image.Height);
                        g.DrawRectangle(pen, x, y, 1, 1);
                    }
                }
                int left = 0, top = 0, top1 = 1, top2 = 1;
                int n1 = (imageHeight - FontSize - Padding * 2);
                int n2 = n1 / 4;
                top1 = n2;
                top2 = n2 * 2;
                Font f;
                Brush b;
                int cindex, findex;
                //随机字体和颜色的验证码字符
                for (int i = 0; i < code.Length; i++)
                {
                    cindex = rand.Next(Colors.Length - 1);
                    findex = rand.Next(Fonts.Length - 1);
                    f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
                    b = new System.Drawing.SolidBrush(Colors[cindex]);
                    if (i % 2 == 1)
                    {
                        top = top2;
                    }
                    else
                    {
                        top = top1;
                    }
                    left = i * fWidth;
                    g.DrawString(code.Substring(i, 1), f, b, left, top);
                }
                //画一个边框 边框颜色为Color.Gainsboro
                g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);
                g.Dispose();
                //产生波形(Add By 51aspx.com)
                image = TwistImage(image, true, 4, 4);
                return image;
            }
            #endregion
            #region 将创建好的图片输出到页面
            public void CreateImageOnPage(string code, HttpContext context)
            {
                Response.BufferOutput = true; //特别注意
                Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));//特别注意
                Response.Cache.SetCacheability(HttpCacheability.NoCache);//特别注意
                Response.AppendHeader("Pragma", "No-Cache"); //特别注意
                MemoryStream ms = new MemoryStream();
                Bitmap image = this.CreateImageCode(code);
                image.Save(ms, ImageFormat.Jpeg);
                Response.ClearContent();
                Response.ContentType = "image/JPEG";
                Response.BinaryWrite(ms.ToArray());
                Response.End();
                ms.Close();
                ms = null;
                image.Dispose();
                image = null;
            }
            #endregion
            #region 生成随机字符码
            public string CreateVerifyCode(int codeLen)
            {
                if (codeLen == 0)
                {
                    codeLen = Length;
                }
                string[] arr = CodeSerial.Split(',');
                string code = "";
                int randValue = -1;
                Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
                for (int i = 0; i < codeLen; i++)
                {
                    randValue = rand.Next(0, arr.Length - 1);
                    code += arr[randValue];
                }
                return code;
            }
            public string CreateVerifyCode()
            {
                return CreateVerifyCode(0);
            }
            #endregion
            #region 另一种验证码样式 GenerateVerifyImage(int length)
            /// <summary>
            /// 将创建好的图片输出到页面
            /// </summary>
            public void GenerateVerifyImage(int nLen)
            {
                string validateCode = "";//生成的验证码
                int nBmpWidth = GetImagewidth(nLen);
                int nBmpHeight = GetImageHeight();
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(nBmpWidth, nBmpHeight);
                //对图像进行弯曲
                TwistImage(bmp, true, 12, 2);
    
                // 1. 生成随机背景颜色
                int nRed, nGreen, nBlue; // 背景的三元色
                System.Random rd = new Random((int)System.DateTime.Now.Ticks);
                nRed = rd.Next(255) % 128 + 128;
                nGreen = rd.Next(255) % 128 + 128;
                nBlue = rd.Next(255) % 128 + 128;
                // 2. 填充位图背景
                System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp);
                graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed, nGreen, nBlue))
                , 0
                , 0
                , nBmpWidth
                , nBmpHeight);
    
                // 3. 绘制干扰线条,采用比背景略深一些的颜色
                int nLines = 3;
                System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed - 17, nGreen - 17, nBlue - 17), 2);
                for (int a = 0; a < nLines; a++)
                {
                    int x1 = rd.Next() % nBmpWidth;
                    int y1 = rd.Next() % nBmpHeight;
                    int x2 = rd.Next() % nBmpWidth;
                    int y2 = rd.Next() % nBmpHeight;
                    graph.DrawLine(pen, x1, y1, x2, y2);
                }
                // 采用的字符集,可以随即拓展,并可以控制字符出现的几率
                string strCode = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                // 4. 循环取得字符,并绘制
                for (int i = 0; i < nLen; i++)
                {
                    int x = (i * 13 + rd.Next(3));
                    int y = rd.Next(4) + 1;
                    // 确定字体
                    System.Drawing.Font font = new System.Drawing.Font("Courier New",//文字字体类型
                    12 + rd.Next() % 4,//文字字体大小
                    System.Drawing.FontStyle.Bold);//文字字体样式
                    char c = strCode[rd.Next(strCode.Length)]; // 随机获取字符
                    validateCode += c.ToString();
                    // 绘制字符
                    graph.DrawString(c.ToString(),
                    font,
                    new SolidBrush(System.Drawing.Color.FromArgb(nRed - 60 + y * 3, nGreen - 60 + y * 3, nBlue - 40 + y * 3)),
                    x,
                    y);
                }
                Session["ValidateCode"] = validateCode;
                //对图像进行弯曲
                TwistImage(bmp, true, 4, 4);
                Response.BufferOutput = true; //特别注意
                Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));//特别注意
                Response.Cache.SetCacheability(HttpCacheability.NoCache);//特别注意
                Response.AppendHeader("Pragma", "No-Cache"); //特别注意
                // 5. 输出字节流
                MemoryStream bstream = new MemoryStream();
                bmp.Save(bstream, ImageFormat.Jpeg);
                Response.ClearContent();
                Response.ContentType = "image/JPEG";
                Response.BinaryWrite(bstream.ToArray());
                Response.End();
                bstream.Close();
                bstream = null;
                bmp.Dispose();
                bmp = null;
                graph.Dispose();
            }
            ///<summary>
            ///得到验证码图片的宽度
            ///</summary>
            ///<paramname="validateNumLength">验证码的长度</param>
            ///<returns></returns>
            public static int GetImagewidth(int validateNumLength)
            {
                return (int)(13 * validateNumLength + 5);
            }
            ///<summary>
            ///得到验证码的高度
            ///</summary>
            ///<returns></returns>
            public static int GetImageHeight()
            {
                return 25;
            }
            #endregion
        }
    }
    
    -------------------------------------------------
    <script  language="javascript" type="text/javascript">
                function DoFresh() {
                    var verify = document.getElementById("Image1");
                    verify.setAttribute('src', 'Validator.aspx');
                    
                } 
            </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>验证码:<asp:TextBox runat="server" vf="require" ID="txtValidator"></asp:TextBox><asp:Image ID="Image1" runat="server" />
    <a href="javascript:DoFresh()">看不清,换一张</a> 

    因为代码较为经典,所以把它写一遍。供大家分享

    注意,因为我是手打的,有些东西写的不完备。

    另一版本

    using System;
    using System.Collections;
    using System.Text;
    using System.Web;
    using System.Drawing;
    using System.Web.Caching;
    using System.Threading;
    using System.Configuration;
    using System.Collections.Specialized;
    using System.Xml;
    using System.IO;
    
    namespace ICS.FacadeClass
    {
        /// <summary>
        /// 验证码的生成处理类
        /// zhangqs
        /// 2007-11-16
        /// </summary>
        public class VerifyCode
        {
            #region 变量定义
            private int maxLength = 4;
            private int minLength = 4;
            private string SessionKey = "";
            #endregion
    
            #region 构造函数
            /// <summary>
            /// 构造函数,支持动态个数字符,若固定字符数,则min=max
            /// </summary>
            /// <param name="minLen"></param>
            /// <param name="maxLen"></param>
            public VerifyCode(int minLen, int maxLen, string sessionKey)
            {
                this.SessionKey = sessionKey;
                this.maxLength = maxLen;
                this.minLength = minLen;
                //生成验证码
                this.Code = createVerifyCode();
            }
    
            /// <summary>
            /// 构造函数,支持动态个数字符,若固定字符数,则min=max
            /// </summary>
            /// <param name="minLen"></param>
            /// <param name="maxLen"></param>
            public VerifyCode(int minLen, int maxLen)
            {
                this.SessionKey = "";
                this.maxLength = maxLen;
                this.minLength = minLen;
                //生成验证码
                this.Code = createVerifyCode();
            }
            #endregion
    
            #region 自定义随机码字符串序列(使用逗号分隔)
            string codeSerial = "3,4,5,6,7,8,A,B,C,E,F,H,K,M,P,Q,R,S,T,U,V,W,X,Y,a,b,c,d,e,f,h,k,m,p,q,s,t,u,v,w,x,y";
            public string CodeSerial
            {
                get { return codeSerial; }
                set { codeSerial = "3,4,5,6,7,8,A,B,C,E,F,H,K,M,P,Q,R,S,T,U,V,W,X,Y,a,b,c,d,e,f,h,k,m,p,q,s,t,u,v,w,x,y"; }
            }
            #endregion
    
            #region 生成随机字符码
            /// <summary>
            /// 生成随机字符码
            /// </summary>
            /// <returns></returns>
            private string createVerifyCode()
            {
                //int len = this.minLength;
                Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
                //if (this.maxLength > this.minLength)
                //{
                //    len = rand.Next(this.minLength, this.maxLength + 1);
                //}
    
                //都用4字符
                int len = 4;
                string[] arr = CodeSerial.Split(',');
                string code = "";
                int randValue = -1;
                for (int i = 0; i < len; i++)
                {
                    randValue = rand.Next(0, arr.Length - 1);
    
                    code += arr[randValue];
                }
                return  code;
            }
            #endregion
    
            #region 验证码的值
            private string _Code;
            /// <summary>
            /// 验证码的值
            /// </summary>
            public string Code
            {
                get { return _Code; }
                set { _Code = value; }
            }
            #endregion
    
            #region 将创建好的图片输出到页面
            public void CreateImageOnPage(HttpContext context)
            {
                #region 对调用页进行校验
                System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
                if (SessionKey != "")
                {
                    if (!this.IsCheckReferer)
                    {
                        page.Session[SessionKey] = this.Code;
                    }
                    else
                    {
                        if (this.MyDomain != this.RefererDomain)
                        {
                            page.Session[SessionKey] = System.Guid.NewGuid().ToString();
                            page.Response.End();
                            return;
                        }
                        else
                        {
                            page.Session[SessionKey] = this.Code;
                        }
                    }
                }
                #endregion
                Bitmap image = null;
    
                try
                {
                    VerifyImg oVerifyImg = new VerifyImg();
                    image = oVerifyImg.CreateImageCode(this.Code);
                }
                catch
                {
                    page.Session[SessionKey] = System.Guid.NewGuid().ToString();
                    page.Response.End();
                }
    
    
                System.IO.MemoryStream srMS = new System.IO.MemoryStream();
                image.Save(srMS, System.Drawing.Imaging.ImageFormat.Png);
                context.Response.ClearContent();
                context.Response.ContentType = "image/Png";
                context.Response.BinaryWrite(srMS.ToArray());
                if (srMS != null)
                {
                    srMS.Close();
                    srMS = null;
                }
                if (image != null)
                {
                    image.Dispose();
                    image = null;
                }
            }
            #endregion
    
            #region 校验用变量
    
            #region 是否对来源页面进行校验
            private bool _IsCheckReferer = false;
            /// <summary>
            /// 是否对来源页面进行校验
            /// </summary>
            public bool IsCheckReferer
            {
                get
                {
                    return _IsCheckReferer;
                }
                set
                {
                    _IsCheckReferer = true;
                }
            }
            #endregion
    
            #region 来源页面的url
            /// <summary>
            /// 来源页面的url
            /// </summary>
            private string RefererUrl
            {
                get
                {
                    try
                    {
                        string str = "";
                        System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
                        object obj = page.Request.UrlReferrer;
                        str = obj == null ? "" : obj.ToString().Trim().ToLower();
                        if (str != "")
                        {
                            if (str.IndexOf("?") != -1)
                            {
                                string[] strA = str.Split('?');
                                str = strA[0];
                            }
                        }
                        return str;
                    }
                    catch { return ""; }
                }
            }
            #endregion
    
            #region 来源页面的域名
            /// <summary>
            /// 来源页面的域名
            /// </summary>
            private string RefererDomain
            {
                get
                {
                    try
                    {
                        string url = RefererUrl;
                        if (url == "") { return ""; }
                        if (url.Length >= 7)
                        {
                            url = url.Substring(7, url.Length - 7);
                        }
                        int index = url.IndexOf("/");
                        if (index != -1)
                        {
                            url = url.Substring(0, index);
                        }
                        return url;
                    }
                    catch { return ""; }
                }
            }
            #endregion
    
            #region 本页面的url
    
            /// <summary>
            /// 本页面的url
            /// </summary>
            private string MyUrl
            {
                get
                {
                    try
                    {
                        System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
                        object obj = page.Request["PATH_INFO"];
                        string str = obj == null ? "" : obj.ToString().Trim().ToLower();
                        if (str != "")
                        {
                            if (str.IndexOf("?") != -1)
                            {
                                string[] strA = str.Split('?');
                                str = strA[0];
                            }
                        }
                        return "http://" + MyDomain + str;
                    }
                    catch { return ""; }
                }
            }
    
            #endregion
    
            #region 本页面域名
            /// <summary>
            /// 本页面域名
            /// </summary>
            private string MyDomain
            {
                get
                {
                    try
                    {
                        System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
                        object obj = page.Request["SERVER_NAME"];
                        return obj == null ? "" : obj.ToString().Trim().ToLower();
                    }
                    catch { return ""; }
                }
            }
            #endregion
    
            #endregion
    
            #region 校验验证码是否通过
            /// <summary>
            /// 校验验证码是否通过
            /// </summary>
            /// <param name="sessionKey">SessionKey</param>
            /// <param name="InputCode">要校验的验证码</param>
            /// <returns>是否通过</returns>
            public static bool CheckIsPass(string sessionKey, string InputCode, out string Msg)
            {
                if ((InputCode == null) || (InputCode == string.Empty) || (InputCode.Trim() == ""))
                {
                    Msg = "验证码为空!";
                    return false;
                }
                InputCode = InputCode.Trim();
                InputCode = InputCode.ToUpper();
                System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
                object oSession = page.Session[sessionKey];
                if (oSession == null)
                {
                    Msg = "验证码超时!";
                    return false;
                }
                string sSession = oSession == null ? "" : oSession.ToString();
                sSession = sSession.Trim();
                if (sSession == "")
                {
                    Msg = "验证码超时!";
                    return false;
                }
                sSession = sSession.ToUpper();
                if (InputCode != sSession)
                {
                    Msg = "您输入的验证码不正确,请重新输入!";
                    return false;
                }
                Msg = "";
                page.Session[sessionKey] = null;     //通过后,验证码作废
                return true;
            }
            #endregion
        }//ClassEnd
    
        /// <summary>
        /// 生成验证码图片类
        /// </summary>
        internal class VerifyImg
        {
            private string ConfigFilePath = HttpContext.Current.Server.MapPath("/SystemConfig/SmsSendLimit.xml");
    
            #region 变量定义
            private int MethodCount = 4;
            private static int iSeed = 0;
            #endregion
    
            #region 生成校验码图片
            public Bitmap CreateImageCode(string code)
            {
    
                string Index = "6";
                try
                {
                    CachedXmlData XmlData = new CachedXmlData(this.ConfigFilePath);
                    Index = XmlData.GetXmlNodeValue("//VerifyCode");
                    if (Index == "6")
                    {
                        return CreateImageCode_6(code);
                    }
                    else
                    {
                        return CreateImageCode_7(code);
                    }
                }
                catch
                {
                    return CreateImageCode_6(code);
                }
    
                ////恢复原来的只有一种算法
                //int MethodIndex = GetCurrentMethodIndex();
                //switch (MethodIndex)
                //{
                //    case 1:
                //        return CreateImageCode_1(code);
                //    case 2:
                //        return CreateImageCode_2(code);
                //    case 3:
                //        return CreateImageCode_3(code);
                //    case 4:
                //        return CreateImageCode_4(code);
                //    default:
                //        return CreateImageCode_4(code);
                //}
            }
            #endregion
    
            #region 生成校验码图片方法6
            private Bitmap CreateImageCode_6(string Code)
            {
                //定义随即数
                Random Rand = new Random();
                //定义字体颜色
                Color[] Colors ={ Color.Black, Color.Red, Color.DarkBlue, Color.Blue, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
                //Color[] srColors ={ Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black };
                Color UserColor = Colors[Rand.Next(7)];
                //定义字体
                string[] Fonts ={ "Arial Rounded MT Bold", "Baskerville Old Face", "Imprint MT Shadow", "Century Old Style Std", "Arial", " Arial Black", "Plantagenet Cherokee" };//"Verdana", "Microsoft Sans Serif", "Comic Sans MS","Arial", "宋体"
                //那前使用的字体
                Font UserFont = null;
                //字的大小
                int FontSize = 0;
                //前一个字体大小
                int FrontFontSize = 20;
                int PointY = 0;
    
                Bitmap image = null;
                Graphics Graph = null;
    
                Brush UserBrush = null;
                try
                {
                    //定义图象 
                    image = new Bitmap((Code.Length * 20 + 25), 40);
                    //画图
                    Graph = Graphics.FromImage(image);
                    //清空图象
                    Graph.Clear(Color.White);
                    //给图象画边框
                    //Graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
    
                    //把验证码转换成字符数组
                    char[] CharCode = Code.ToCharArray();
    
                    Point UserPoint;
    
                    #region 用于字体弯曲
                    //定义图片弯曲的角度
                    int Srseedangle = 20;
                    float UserAngle;
                    //封状文本 用于
                    StringFormat srFormat = new StringFormat(StringFormatFlags.NoClip);
                    //设置文本垂直居中
                    srFormat.Alignment = StringAlignment.Center;
                    //设置文本水平居中
                    srFormat.LineAlignment = StringAlignment.Center;
                    #endregion
    
                    #region 生成弯线
                    Pen UserPen = new Pen(UserColor);
                    //线的大小
                    Double RandDouble = Rand.NextDouble();
                    if (RandDouble > 0.5)
                    {
                        RandDouble = RandDouble - 0.5;
                    }
                    UserPen.Width = (float)(2 + RandDouble);
                    int ImgHeight = image.Height;
                    int ImgWidth = image.Width;
    
                    int RandomPoint = 10;
    
                    Point[] Points = new Point[RandomPoint];
    
                    int RandomLength = ImgWidth / RandomPoint;
                    int TempPointX = 0;
    
                    for (int i = 0; i < RandomPoint; i++)
                    {
    
                        TempPointX = Rand.Next((RandomLength * i) + (RandomLength / 5), (RandomLength * (i + 1)) - (RandomLength / 5));
                        Points[i] = new Point(TempPointX, Rand.Next(12, ImgHeight - 12));
                    }
    
                    Graph.DrawBeziers(UserPen, Points);
    
                    #endregion
    
                    for (int i = 0, j = CharCode.Length; i < j; i++)
                    {
                        //定义字体 参数分别为字体样式 字体大小 字体字形
                        FontSize = Rand.Next(26, 28);
                        UserFont = new Font(Fonts[Rand.Next(Fonts.Length)], FontSize, FontStyle.Bold);
    
                        PointY = 22;// Rand.Next(22, 22);
    
                        //填充图形
                        UserBrush = new SolidBrush(UserColor);
    
                        //定义坐标
                        UserPoint = new Point(FrontFontSize - 4, PointY);
                        FrontFontSize = FontSize;
    
                        //定义倾斜角度
                        UserAngle = Rand.Next(-Srseedangle, Srseedangle);
                        ////倾斜
                        Graph.TranslateTransform(UserPoint.X, UserPoint.Y, System.Drawing.Drawing2D.MatrixOrder.Append);
                        Graph.RotateTransform(UserAngle);
                        //填充字符
                        Graph.DrawString(CharCode[i].ToString(), UserFont, UserBrush, 1, 1, srFormat);
                        //Graph.DrawString(CharCode[i].ToString(), UserFont, UserBrush, FrontFontSize, 1);
                        ////回归正常
                        Graph.RotateTransform(-UserAngle);
                        Graph.TranslateTransform(-1, -UserPoint.Y, System.Drawing.Drawing2D.MatrixOrder.Append);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
    
                    if (Graph != null)
                    {
                        Graph.Dispose();
                        Graph = null;
                    }
                    if (UserFont != null)
                    {
                        UserFont.Dispose();
                        UserFont = null;
                    }
                    if (UserBrush != null)
                    {
                        UserBrush.Dispose();
                        UserBrush = null;
                    }
                }
    
                return image;
            }
            #endregion
    
            #region 生成校验码图片方法7
            private Bitmap CreateImageCode_7(string Code)
            {
    
                //定义随即数
                Random Rand = new Random();
                //定义字体颜色
                Color[] Colors ={ Color.Black, Color.Red, Color.DarkBlue, Color.Blue, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
                //Color[] srColors ={ Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black };
                Color UserColor = Colors[Rand.Next(7)];
                //定义字体
                string[] Fonts ={ "Arial Rounded MT Bold", "Baskerville Old Face", "Imprint MT Shadow", "Century Old Style Std", "Arial", " Arial Black", "Plantagenet Cherokee" };
                //那前使用的字体
                Font UserFont = null;
                //字的大小
                int FontSize = 0;
                //前一个字体大小
                int FrontFontSize = 20;
                int PointY = 0;
    
                Bitmap image = null;
                Graphics Graph = null;
    
                Brush UserBrush = null;
                try
                {
                    //定义图象 
                    image = new Bitmap((Code.Length * 20 + 25), 40);
                    //画图
                    Graph = Graphics.FromImage(image);
                    //清空图象
                    Graph.Clear(Color.White);
                    ////给图象画边框
                    //Graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
    
                    //把验证码转换成字符数组
                    char[] CharCode = Code.ToCharArray();
    
                    Point UserPoint;
    
                    #region 用于字体弯曲
                    //定义图片弯曲的角度
                    int Srseedangle = 15;
                    float UserAngle;
                    //封状文本 用于
                    StringFormat srFormat = new StringFormat(StringFormatFlags.NoClip);
                    //设置文本垂直居中
                    srFormat.Alignment = StringAlignment.Center;
                    //设置文本水平居中
                    srFormat.LineAlignment = StringAlignment.Center;
                    #endregion
    
                    #region 生成弯线
                    Pen UserPen = new Pen(UserColor);
                    //线的大小
                    Double RandDouble = Rand.NextDouble();
                    if (RandDouble > 0.5)
                    {
                        RandDouble = RandDouble - 0.5;
                    }
                    UserPen.Width = (float)(2 + RandDouble);
                    int ImgHeight = image.Height;
                    int ImgWidth = image.Width;
                    int RandomPoint = 10;
    
                    Point[] Points = new Point[RandomPoint];
    
                    int RandomLength = ImgWidth / RandomPoint;
                    int TempPointX = 0;
    
                    for (int i = 0; i < RandomPoint; i++)
                    {
    
                        TempPointX = Rand.Next((RandomLength * i), (RandomLength * (i + 1)));
                        Points[i] = new Point(TempPointX, Rand.Next(5, ImgHeight - 5));
                    }
    
                    Graph.DrawBeziers(UserPen, Points);
    
                    #endregion
    
    
                    for (int i = 0, j = CharCode.Length; i < j; i++)
                    {
                        //定义字体 参数分别为字体样式 字体大小 字体字形
                        FontSize = Rand.Next(26, 26);
                        UserFont = new Font(Fonts[Rand.Next(Fonts.Length)], FontSize, FontStyle.Regular);
    
                        PointY = Rand.Next(20, 24);
    
                        //填充图形
                        UserBrush = new SolidBrush(UserColor);
    
                        //定义坐标
                        UserPoint = new Point(FrontFontSize - 5, PointY);
                        FrontFontSize = FontSize;
    
                        //定义倾斜角度
                        UserAngle = Rand.Next(-Srseedangle, Srseedangle);
                        //倾斜
                        Graph.TranslateTransform(UserPoint.X, UserPoint.Y);
                        Graph.RotateTransform(UserAngle);
                        //填充字符
                        Graph.DrawString(CharCode[i].ToString(), UserFont, UserBrush, 1, 1, srFormat);
                        //回归正常
                        Graph.RotateTransform(-UserAngle);
                        Graph.TranslateTransform(1, -UserPoint.Y);
                    }
    
                    //产生波形(Add By 51aspx.com)
                    image = TwistImage(image, true, Rand.NextDouble(), Rand.NextDouble());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
    
                    if (Graph != null)
                    {
                        Graph.Dispose();
                        Graph = null;
                    }
                    if (UserFont != null)
                    {
                        UserFont.Dispose();
                        UserFont = null;
                    }
                    if (UserBrush != null)
                    {
                        UserBrush.Dispose();
                        UserBrush = null;
                    }
                }
    
                return image;
            }
            #endregion
    
            #region 生成校验码图片方法五
    
            #region 获得图片所在目录地址
    
            /// <summary>
            /// 获得图片所在目录地址
            /// </summary>
            /// <returns></returns>
            private string GetImagePath()
            {
                NameValueCollection appSettings = System.Configuration.ConfigurationSettings.AppSettings;
    
                //Server.MapPath(
                if (appSettings != null)
                {
                    try
                    {
                        return System.Web.HttpContext.Current.Server.MapPath("/CodeImagePath/");
                        //return appSettings["CodeImagePath"].Trim();
                    }
                    catch
                    {
                        return null;
                    }
                }
                else
                {
                    return null;
                }
    
            }
            #endregion
    
            #region 自定义随机码字符串序列 转成字符数组
            /// <summary>
            /// 自定义随机码字符串序列 转成字符数组
            /// </summary>
            /// <returns></returns>
            private char[] CodeSerialToChar()
            {
                string[] StrArr = new VerifyCode(1, 1).CodeSerial.Split(',');
                char[] CharArr = new char[StrArr.Length];
                for (int i = 0; i < StrArr.Length; i++)
                {
                    CharArr[i] = Convert.ToChar(StrArr[i]);
                }
                return CharArr;
            }
            #endregion
    
            
    
            #region 缓存图片 如果改变图片 同时请修改RemoveCache.txt
            /// <summary>
            /// 缓存图片 如果改变图片 同时请修改RemoveCache.txt
            /// </summary>
            private void CacheImage(string CacheKey, ArrayList Image)
            {
                string ImagePath = GetImagePath();
                if (ImagePath != null)
                {
                    HttpRuntime.Cache.Insert(CacheKey, Image, new CacheDependency(ImagePath + "\\RemoveCache.txt"));
                    //HttpRuntime.Cache.Insert(CacheKey, Image, new CacheDependency(GetImagePath+"\\RemoveCache.txt"), DateTime.Now.AddMonths(1), Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(onRemove));
            
                }
    
            }
            #endregion
    
            #region 获得所有图片
            /// <summary>
            /// 获得所有图片
            /// </summary>
            /// <returns></returns>
            private ArrayList GetImage()
            {
                string VerifyCodeCacheKey = "VerifyCode_Cache_Image_Key";
    
                ArrayList ListImage = HttpRuntime.Cache[VerifyCodeCacheKey] as ArrayList;
                if (ListImage != null && ListImage.Count > 0)
                {
                    return ListImage;
                }
                else
                {
                    ListImage = new ArrayList();
                    char[] CodeArr = CodeSerialToChar();
                    string ImagePath;
                    for (int i = 0; i < CodeArr.Length; i++)
                    {
                        try
                        {
    
                            if (CodeArr[i] >= 65 && CodeArr[i] <= 90)
                            {
                                ImagePath = GetImagePath() + "U" + CodeArr[i] + ".gif";
                            }
                            else
                            {
                                ImagePath = GetImagePath() + CodeArr[i] + ".gif";
                            }
                            ListImage.Insert(i, new Bitmap(ImagePath));
                        }
                        catch
                        {
                        }
                    }
                    if (ListImage != null && ListImage.Count > 0)
                    {
                        CacheImage(VerifyCodeCacheKey, ListImage);
                    }
    
                    return ListImage;
                }
            }
            #endregion
    
    
            #region 生成校验码图片
            /// <summary>
            /// 生成校验码图片
            /// </summary>
            /// <param name="Code"></param>
            /// <returns></returns>
            private Bitmap CreateImageCode_5(string Code)
            {
                Random Ran = new Random(unchecked((int)DateTime.Now.Ticks));
                Bitmap Image = new Bitmap((Code.Length * 20 + 12), 30);
                Graphics Graph = Graphics.FromImage(Image);
                Graph.Clear(Color.White);
    
                float Str_x;
                float Str_y;
                ArrayList ListImage = GetImage();
                char[] CodeArr = CodeSerialToChar();
                if (ListImage != null && ListImage.Count > 0)
                {
                    for (int i = 0; i < Code.Length; i++)
                    {
                        for (int j = 0; j < CodeArr.Length; j++)
                        {
                            if (CodeArr[j] == Code[i])
                            {
                                Str_x = (i * 20 + 6);
                                Str_y = Ran.Next(9) + (float)Ran.NextDouble();
                                Graph.DrawImage((Image)ListImage[j], Str_x, Str_y);
                                break;
                            }
                        }
                    }
                }
    
                return Image;
            }
            #endregion
    
            #endregion
    
            #region 生成校验码图片方法四
            private Bitmap CreateImageCode_4(string code)
            {
                Random rnd;
                rnd = new Random(unchecked((int)DateTime.Now.Ticks));
                int fSize = 14;
                int Padding = 2;
                int fWidth = fSize + Padding;
    
                int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;
                int imageHeight = fSize * 2 + Padding * 1 - 5;
    
                System.Drawing.Bitmap image = new Bitmap(imageWidth, imageHeight);
    
                Graphics g = Graphics.FromImage(image);
    
                g.Clear(Color.White);
    
                #region 给背景添加随机生成的燥点
                Color ChaosColor = Color.LightGray;   //燥点的颜色(默认灰色)
                Pen pen = new Pen(ChaosColor, 0);
                int Length = code.Length;
                int c = Length * 30;
                for (int i = 0; i < c; i++)
                {
                    int x = rnd.Next(image.Width);
                    int y = rnd.Next(image.Height);
                    g.DrawRectangle(pen, x, y, 1, 1);
                }
                #endregion
    
                int left = 0, top = 0, top1 = 1, top2 = 1;
                int n1 = (imageHeight - fSize - Padding * 2);
                int n2 = n1 / 4;
                top1 = n2;
                top2 = n2 * 3;
                Font f;
                Brush b;
    
                int cindex, findex;
                string[] Fonts ={ "Arial", "Georgia" };
                Color[] Colors ={ Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
    
                for (int i = 0; i < Length; i++)
                {
                    cindex = rnd.Next(Colors.Length - 1);
                    findex = rnd.Next(Fonts.Length - 1);
                    f = new Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
                    b = new System.Drawing.SolidBrush(Colors[cindex]);
                    if (i % 2 == 1)
                    {
                        top = top2;
                    }
                    else
                    {
                        top = top1;
                    }
                    left = i * fWidth;
                    g.DrawString(code.Substring(i, 1), f, b, left, top);
                }
                //画一个边框 边框颜色为Color.Gainsboro
                g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);
                g.Dispose();
                image = TwistImage(image, true, 4, 2);
                return image;
            }
    
            #region 产生波形滤镜效果
            private const double PI = 3.1415926535897932384626433832795;
            private const double PI2 = 6.283185307179586476925286766559;
            /// <summary>
            /// 正弦曲线Wave扭曲图片(Edit By 51aspx.com)
            /// </summary>
            /// <param name="srcBmp">图片路径</param>
            /// <param name="bXDir">如果扭曲则选择为True</param>
            /// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>
            /// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>
            /// <returns></returns>
            private System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
            {
                System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
                // 将位图背景填充为白色
    
                System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
                graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);
                //graph.FillRectangle(new SolidBrush(System.Drawing.Color.AliceBlue), 0, 0, destBmp.Width, destBmp.Height);
                graph.Dispose();
    
                double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
    
                for (int i = 0; i < destBmp.Width; i++)
                {
                    for (int j = 0; j < destBmp.Height; j++)
                    {
                        double dx = 0;
                        dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
                        dx += dPhase;
                        double dy = Math.Sin(dx);
    
                        // 取得当前点的颜色
                        int nOldX = 0, nOldY = 0;
                        nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
                        nOldY = bXDir ? j : j + (int)(dy * dMultValue);
    
                        System.Drawing.Color color = srcBmp.GetPixel(i, j);
                        if (nOldX >= 0 && nOldX < destBmp.Width
                         && nOldY >= 0 && nOldY < destBmp.Height)
                        {
                            destBmp.SetPixel(nOldX, nOldY, color);
                        }
                    }
                }
                return destBmp;
            }
            #endregion
    
            #endregion
    
            #region 生成校验码图片方法三
            private Bitmap CreateImageCode_3(string code)
            {
                int iwidth = (int)(code.Length * 15);
                Bitmap image = new Bitmap(iwidth, 20);
                Graphics g = Graphics.FromImage(image);
                g.Clear(Color.White);
                Random random = new Random();
                //画图片的背景噪音线
                for (int i = 0; i < 100; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
    
                    g.DrawLine(new Pen(Color.LightGray), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 15, FontStyle.Bold | FontStyle.Italic);
                System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(
                    new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Gray, 1.2f, true);
                g.DrawString(code, font, brush, 0, 0);
                //画图片的前景噪音点
                for (int i = 0; i < 10; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.LightYellow);
                }
                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                g.DrawLine(new Pen(GetRandomColor()), 0, 0, iwidth, 20);
                g.DrawLine(new Pen(GetRandomColor()), 0, 20, iwidth, 0);
    
                g.DrawLine(new Pen(GetRandomColor()), iwidth / 2, 0, iwidth / 2, 20);
    
                g.DrawLine(new Pen(GetRandomColor()), 0, 10, iwidth, 10);
    
                return image;
            }
            #endregion
    
            #region 生成校验码图片方法二
            private Bitmap CreateImageCode_2(string checkCode)
            {
                int iwidth = (int)(checkCode.Length * 14);
                System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 25);
                Graphics g = Graphics.FromImage(image);
                g.Clear(Color.AliceBlue);
                #region 定义颜色
                Color[] c = {
                    Color.Black,
                    Color.Red,
                    Color.DarkBlue,
                    Color.Green,
                    Color.Orange,
                    Color.Brown,
                    Color.DarkCyan,
                    Color.Purple,
                };
                #endregion
    
                #region 定义字体
                string[] font = { 
                    "Verdana",
                    "Microsoft Sans Serif",
                    "Comic Sans MS",
                    "Arial",
                    "宋体" 
                };
                #endregion
    
                Random rand = new Random();
    
                #region 随机输出噪点
                for (int i = 0; i < 10; i++)
                {
                    int x = rand.Next(image.Width);
                    int y = rand.Next(image.Height);
                    g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
                }
                #endregion
    
                #region 输出不同字体和颜色的验证码字符
                for (int i = 0; i < checkCode.Length; i++)
                {
                    int cindex = rand.Next(7);
                    int findex = rand.Next(5);
                    Font f = new Font(font[findex], 13, System.Drawing.FontStyle.Italic);
                    Brush b = new System.Drawing.SolidBrush(GetRandomColor());
                    int ii = 2;
                    if ((i + 1) % 2 == 0)
                    {
                        ii = 4;
                    }
                    g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
                }
                #endregion
    
                image = TwistImage(image, true, -4, -1);
                g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
                return image;
            }
            #endregion
    
            #region 生成校验码图片方法一
            private Bitmap CreateImageCode_1(string code)
            {
                //定义图片弯曲的角度
                int srseedangle = 45;
                //定义字体颜色
                // Color[] srColors ={ Color.Black, Color.Red, Color.DarkBlue, Color.Blue, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
                Color[] srColors ={ Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black };
                //定义字体
                string[] srFonts ={ "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
                Bitmap image = null;
                Graphics g = null;
                Pen srPen = null;
                Font srFont = null;
                Brush srBrush = null;
                try
                {
                    //定义图象 
                    image = new Bitmap((code.Length * 20 + 12), 30);
                    //画图
                    g = Graphics.FromImage(image);
                    //清空图象
                    g.Clear(Color.AliceBlue);
                    //给图象画边框
                    g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
                    //定义随即数
                    Random rand = new Random();
                    //定义画笔
                    srPen = new Pen(Color.LightGray, 0);
                    ////画噪点
                    //for (int i = 0; i < 100; i++)
                    //{
                    //    g.DrawRectangle(srPen, rand.Next(1, image.Width - 2), rand.Next(1, image.Height - 2), 1, 1);
                    //}
                    //将字符串转化为字符数组 
                    char[] srchars = code.ToCharArray();
                    //封状文本
                    StringFormat srFormat = new StringFormat(StringFormatFlags.NoClip);
                    //设置文本垂直居中
                    srFormat.Alignment = StringAlignment.Center;
                    //设置文本水平居中
                    srFormat.LineAlignment = StringAlignment.Center;
    
                    //循环画出每个字符              
                    int pading = 0; // 间隔
    
    //                bool isJoin = false; //是否重叠
                    int lastSize = 15;
                    int sz = 15;
                    Color lastColor = Color.Blue;
                    Color c = Color.Blue;
                    for (int i = 0, j = srchars.Length; i < j; i++)
                    {
                        //pading = rand.Next(-6, 6);
                        pading = 2;
                        sz = 18;
                        ////定义字体 参数分别为字体样式 字体大小 字体字形
                        //if (i == j - 2 && !isJoin) //倒数第二个没有重叠的话,则设置为大字体,保证重叠
                        //{                       
                        //    sz = 20;
                        //}
                        //else
                        //{
                        //    sz = rand.Next(15, 20); 
                        //}
                        c = srColors[rand.Next(7)];
                        //定义字体 参数分别为字体样式 字体大小 字体字形
                        srFont = new Font(srFonts[rand.Next(5)], sz, FontStyle.Regular);
    
                        /////如果上一个字是14号,那么下一字向左入侵保证重叠
                        ////对大字号重叠的可视性要比小字号强.
                        ////重叠时最好将当前字符的颜色设为上一字符颜色
                        //if (lastSize == 20)
                        //{
                        //    c = lastColor;
                        //    isJoin = true;
                        //    pading = -5;
                        //}
    
                        //填充图形
                        srBrush = new SolidBrush(c);
    
                        lastColor = c;
                        lastSize = sz;
                        //定义坐标
                        Point srPoint = new Point(16 + pading, 16);
                        //定义倾斜角度
                        float srangle = rand.Next(-srseedangle, srseedangle);
                        //倾斜
                        g.TranslateTransform(srPoint.X, srPoint.Y);
                        g.RotateTransform(srangle);
                        //填充字符
                        g.DrawString(srchars[i].ToString(), srFont, srBrush, 1, 1, srFormat);
                        //回归正常
                        g.RotateTransform(-srangle);
                        g.TranslateTransform(2, -srPoint.Y);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
    
                    if (g != null)
                    {
                        g.Dispose();
                        g = null;
                    }
                    if (srPen != null)
                    {
                        srPen.Dispose();
                        srPen = null;
                    }
                    if (srFont != null)
                    {
                        srFont.Dispose();
                        srFont = null;
                    }
                    if (srBrush != null)
                    {
                        srBrush.Dispose();
                        srBrush = null;
                    }
                }
    
                return image;
            }
            #endregion
    
            #region 获取当前方法序号
            /// <summary>
            /// 获取当前方法序号
            /// </summary>
            /// <returns></returns>
            private int GetCurrentMethodIndex()
            {
                if (iSeed == 999999)
                {
                    iSeed = 0;
                }
                else
                {
                    iSeed = iSeed + 1;
                }
    
                int randValue = -1;
                int curSeed = unchecked((int)DateTime.Now.Ticks + iSeed);
                //System.Web.HttpContext.Current.Response.Write(iSeed.ToString() + "&nbsp;&nbsp;" + "种子:" + curSeed.ToString() + "<br>");
                Random rand = new Random(curSeed);
                randValue = rand.Next(1, MethodCount + 1);
                return randValue;
            }
            #endregion
    
            #region 生成随机颜色
            /// <summary>
            /// 生成随机颜色
            /// </summary>
            /// <returns></returns>
            private Color GetRandomColor()
            {
                Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
                System.Threading.Thread.Sleep(RandomNum_First.Next(50));
                Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
                //  为了在白色背景上显示,尽量生成深色
                int int_Red = RandomNum_First.Next(256);
                int int_Green = RandomNum_Sencond.Next(256);
                int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green;
                int_Blue = (int_Blue > 255) ? 255 : int_Blue;
                return Color.FromArgb(int_Red, int_Green, int_Blue);
            }
            #endregion
        }
    
        ///// <summary>
        ///// 获得XML文件并缓存XML文件
        ///// </summary>
        //public class CachedXmlData
        //{
        //    /// <summary>
        //    /// 用于 文件路径 和缓存Key
        //    /// </summary>
        //    private string ConfigFilePath = "";
    
        //    public CachedXmlData(string FilePath)
        //    {
        //        this.ConfigFilePath = FilePath;
        //    }
    
        //    #region  获得XmlDocument 缓存以依赖FilePath
        //    /// <summary>
        //    /// 获得XmlDocument 缓存以依赖FilePath中的文件 
        //    /// </summary>
        //    /// <param name="FilePath">如果为null 用 /SystemConfig/SmsSendLimit.xml</param>
        //    /// <returns></returns>
        //    private XmlDocument GetXmlDoc()
        //    {
        //        XmlDocument XmlDoc = HttpRuntime.Cache[this.ConfigFilePath] as XmlDocument;
        //        if (XmlDoc != null)
        //        {
        //            return XmlDoc;
        //        }
        //        else
        //        {
        //            XmlDoc = new XmlDocument();
        //            try
        //            {
        //                if (File.Exists(ConfigFilePath))
        //                {
        //                    XmlDoc.Load(ConfigFilePath);
        //                    HttpRuntime.Cache.Insert(this.ConfigFilePath, XmlDoc, new CacheDependency(ConfigFilePath));
        //                }
        //            }
        //            catch
        //            {
        //                if (XmlDoc != null)
        //                {
        //                    XmlDoc = null;
        //                }
        //            }
    
        //            return XmlDoc;
        //        }
    
        //    }
        //    #endregion
    
        //    #region 获得Xml指定的路径的值
        //    /// <summary>
        //    /// 获得Xml指定的路径的值
        //    /// </summary>
        //    /// <param name="XPath">Xml Path</param>
        //    /// <returns>string 或 null</returns>
        //    public string GetXmlNodeValue(string XPath)
        //    {
        //        string ReturnValue = null;
        //        XmlDocument XmlDoc = GetXmlDoc();
        //        if (XmlDoc != null)
        //        {
        //            try
        //            {
        //                XmlNode Node = XmlDoc.SelectSingleNode(XPath);
        //                if (Node != null)
        //                {
        //                    ReturnValue = Node.InnerText;
        //                }
        //            }
        //            catch (Exception)
        //            {
        //                ReturnValue = null;
        //            }
    
        //        }
        //        return ReturnValue;
        //    }
        //    #endregion
    
        //    #region 获得Xml指定的路径的XmlNodeXmlNodeList
        //    /// <summary>
        //    /// 获得Xml指定的路径的XmlNode
        //    /// </summary>
        //    /// <param name="XPath">Xml Path</param>
        //    /// <returns>XmlNode 或 null</returns>
        //    public XmlNodeList GetXmlNode(string XPath)
        //    {
        //        XmlNodeList ReturnValue = null;
        //        XmlDocument XmlDoc = GetXmlDoc();
        //        if (XmlDoc != null)
        //        {
        //            try
        //            {
        //                ReturnValue = XmlDoc.SelectNodes(XPath);
        //            }
        //            catch
        //            {
        //                ReturnValue = null;
        //            }
        //        }
        //        return ReturnValue;
        //    }
        //    #endregion
        //}
    
    }
  • 相关阅读:
    机器学习(八) 多项式回归与模型泛化(上)
    机器学习(七) PCA与梯度上升法 (下)
    机器学习(七) PCA与梯度上升法 (上)
    机器学习(六) 梯度下降法 (下)
    机器学习(六) 梯度下降法 (上)
    机器学习(五) 线性回归法 (下)
    机器学习(五) 线性回归法 (上)
    机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)
    获取字符串中img标签的url集合(转载)
    微信上传文章素材—ASP.NET MVC从View层传数据到Controller层
  • 原文地址:https://www.cnblogs.com/markli/p/2758548.html
Copyright © 2011-2022 走看看