Aspx 验证码_各种封装

验证码

  1 namespace CZBK.TestProject.Common
  2 {
  3     public class ValidateCode
  4     {
  5         public ValidateCode()
  6         {
  7         }
  8         /// <summary>
  9         /// 验证码的最大长度
 10         /// </summary>
 11         public int MaxLength
 12         {
 13             get { return 10; }
 14         }
 15         /// <summary>
 16         /// 验证码的最小长度
 17         /// </summary>
 18         public int MinLength
 19         {
 20             get { return 1; }
 21         }
 22         /// <summary>
 23         /// 生成验证码
 24         /// </summary>
 25         /// <param name="length">指定验证码的长度</param>
 26         /// <returns></returns>
 27         public string CreateValidateCode(int length)
 28         {
 29             int[] randMembers = new int[length];
 30             int[] validateNums = new int[length];
 31             string validateNumberStr = "";
 32             //生成起始序列值
 33             int seekSeek = unchecked((int)DateTime.Now.Ticks);
 34             Random seekRand = new Random(seekSeek);
 35             int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
 36             int[] seeks = new int[length];
 37             for (int i = 0; i < length; i++)
 38             {
 39                 beginSeek += 10000;
 40                 seeks[i] = beginSeek;
 41             }
 42             //生成随机数字
 43             for (int i = 0; i < length; i++)
 44             {
 45                 Random rand = new Random(seeks[i]);
 46                 int pownum = 1 * (int)Math.Pow(10, length);
 47                 randMembers[i] = rand.Next(pownum, Int32.MaxValue);
 48             }
 49             //抽取随机数字
 50             for (int i = 0; i < length; i++)
 51             {
 52                 string numStr = randMembers[i].ToString();
 53                 int numLength = numStr.Length;
 54                 Random rand = new Random();
 55                 int numPosition = rand.Next(0, numLength - 1);
 56                 validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
 57             }
 58             //生成验证码
 59             for (int i = 0; i < length; i++)
 60             {
 61                 validateNumberStr += validateNums[i].ToString();
 62             }
 63             return validateNumberStr;
 64         }
 65 
 66         /// <summary>
 67         /// 创建验证码的图片
 68         /// </summary>
 69         /// <param name="containsPage">要输出到的page对象</param>
 70         /// <param name="validateNum">验证码</param>
 71         public void CreateValidateGraphic(string validateCode, HttpContext context)
 72         {
 73             Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
 74             Graphics g = Graphics.FromImage(image);
 75             try
 76             {
 77                 //生成随机生成器
 78                 Random random = new Random();
 79                 //清空图片背景色
 80                 g.Clear(Color.White);
 81                 //画图片的干扰线
 82                 for (int i = 0; i < 25; i++)
 83                 {
 84                     int x1 = random.Next(image.Width);
 85                     int x2 = random.Next(image.Width);
 86                     int y1 = random.Next(image.Height);
 87                     int y2 = random.Next(image.Height);
 88                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 89                 }
 90                 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
 91                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
 92                  Color.Blue, Color.DarkRed, 1.2f, true);
 93                 g.DrawString(validateCode, font, brush, 3, 2);
 94                 //画图片的前景干扰点
 95                 for (int i = 0; i < 100; i++)
 96                 {
 97                     int x = random.Next(image.Width);
 98                     int y = random.Next(image.Height);
 99                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
100                 }
101                 //画图片的边框线
102                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
103                 //保存图片数据
104                 MemoryStream stream = new MemoryStream();
105                 image.Save(stream, ImageFormat.Jpeg);
106                 //输出图片流
107                 context.Response.Clear();
108                 context.Response.ContentType = "image/jpeg";
109                 context.Response.BinaryWrite(stream.ToArray());
110             }
111             finally
112             {
113                 g.Dispose();
114                 image.Dispose();
115             }
116         }
117         /// <summary>
118         /// 得到验证码图片的长度
119         /// </summary>
120         /// <param name="validateNumLength">验证码的长度</param>
121         /// <returns></returns>
122         public static int GetImageWidth(int validateNumLength)
123         {
124             return (int)(validateNumLength * 12.0);
125         }
126         /// <summary>
127         /// 得到验证码的高度
128         /// </summary>
129         /// <returns></returns>
130         public static double GetImageHeight()
131         {
132             return 22.5;
133         }
134     }
135 }

生成缩略图-->后面直接去调用就OK了

 public class ImageHelper
    {
        #region 缩略图
        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="originalImagePath">源图路径(物理路径)</param>
        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>    
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
        {
            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

            int towidth = width;
            int toheight = height;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;

            switch (mode)
            {
                case "HW":  //指定高宽缩放(可能变形)                
                    break;
                case "W":   //指定宽,高按比例                    
                    toheight = originalImage.Height * width / originalImage.Width;
                    break;
                case "H":   //指定高,宽按比例
                    towidth = originalImage.Width * height / originalImage.Height;
                    break;
                case "Cut": //指定高宽裁减(不变形)                
                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height * towidth / toheight;
                        y = 0;
                        x = (originalImage.Width - ow) / 2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width * height / towidth;
                        x = 0;
                        y = (originalImage.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }

            //新建一个bmp图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

            //新建一个画板
            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //清空画布并以透明背景色填充
            g.Clear(System.Drawing.Color.Transparent);

            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);

            try
            {
                //以jpg格式保存缩略图
                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }
        #endregion
    }

水印图

 1  public void ProcessRequest(HttpContext context)
 2         {
 3             //生成水印图
 4             context.Response.ContentType = "text/plain";
 5           //访问该页面创建一张图片,并且该图片上写字.
 6             using (Bitmap map = new Bitmap(300, 400))//创建了一个画布
 7             {
 8                 using (Graphics g = Graphics.FromImage(map))//为画布创建了一个画笔
 9                 {
10                     g.Clear(Color.Azure);
11                     g.DrawString("传智播客", new Font("黑体", 14.0f, FontStyle.Bold), Brushes.Red, new PointF(80,90));
12                     string fileName = Guid.NewGuid().ToString();
13                     map.Save(context.Request.MapPath("/ImagePath/"+fileName+".jpg"),System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片.
14                 }
15             }
16         }

文件下载

1  public void ProcessRequest(HttpContext context)
2         {
3             context.Response.ContentType = "text/plain";
4             string encodeFileName = "aaa.txt";
5             context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename="{0}"", encodeFileName));//在响应头中加上Content-Disposition,attachment表示以附件形式下载.
6             context.Response.WriteFile("aaa.txt");
7         }

文件上传

 public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            HttpPostedFile file=context.Request.Files["fileUp"];//接收文件数据.
            if (file == null)
            {
                context.Response.Write("请选择文件!!");
            }
            else
            {
                //判断上传的文件的类型.
               string fileName= Path.GetFileName(file.FileName);//获取文件名与扩张名. aa.jpg
               string fileExt = Path.GetExtension(fileName);//获取扩展名.
               if (fileExt == ".jpg"||fileExt==".gif")
               {
                   string dir = "/ImagePath/"+DateTime.Now.Year+"/"+DateTime.Now.Month+"/"+DateTime.Now.Day+"/";
                   //创建文件夹.
                   Directory.CreateDirectory(Path.GetDirectoryName(context.Request.MapPath(dir)));
                   //需要对上传的文件进行重命名.
                   string newfileName = Guid.NewGuid().ToString();
                   string fullDir = dir + newfileName + fileExt;//构建了完整文件路径.
                 //  file.SaveAs(context.Request.MapPath(fullDir));
                 //  file.SaveAs(context.Request.MapPath("/ImagePath/"+fileName));//保存文件
                   using (Image imge = Image.FromStream(file.InputStream))//根据上传的文件流创建Image
                   {
                       using (Bitmap map = new Bitmap(imge.Width,imge.Height))
                       {
                           using (Graphics g = Graphics.FromImage(map))
                           {
                               //设置高质量插值法
                               g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

                               //设置高质量,低速度呈现平滑程度
                               g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                               //先将图片画到画布上.
                               g.DrawImage(imge, new Rectangle(0, 0, imge.Width, imge.Height));
                               //在右下角添加水印.
                               g.DrawString("传智播客", new Font("黑体", 14.0f, FontStyle.Bold), Brushes.Red, new PointF(imge.Width-100,imge.Height-30));
                               map.Save(context.Request.MapPath(fullDir),System.Drawing.Imaging.ImageFormat.Jpeg);
                           }
                       }
                   }

                   context.Response.Write("<html><head></head><body><img src='"+fullDir+"'/></body></html>");
                   //最后将上传成功的图片的路径存储到数据库。
               }
               else
               {
                   context.Response.Write("文件类型错误!!");
               }

            }
        }

PageBar

 1  public class PageBar
 2     {
 3        /// <summary>
 4        /// 获取数字页码条
 5        /// </summary>
 6        /// <param name="pageIndex">当前页码值</param>
 7        /// <param name="pageCount">总的页数</param>
 8        /// <returns></returns>
 9        public static string GetPageBar(int pageIndex, int pageCount)
10        {
11            if (pageCount == 1)//如果只有1页,不用在显示页码条
12            {
13                return string.Empty;
14            }
15            //计算起始位置与终止位置。
16            int start = pageIndex - 5;//页面上显示10个数字页码
17            if (start < 1)
18            {
19                start = 1;
20            }
21            int end = start + 9;//终止位置.
22            if(end>pageCount)//该条件成立,需要重新计算起始位置
23            {
24                end=pageCount;
25                start = end - 9>1?end-9:1;
26            }
27            StringBuilder sb = new StringBuilder();
28            if (pageIndex > 1)
29            {
30                sb.Append(string.Format("<a href='?pageIndex={0}'>上一页</a>",pageIndex-1));
31            }
32            for (int i = start; i <= end; i++)
33            {
34                if (i == pageIndex)//如果循环的数字与当前页码相等,那么不用超链接
35                {
36                    sb.Append(i);
37                }
38                else
39                {
40                    sb.Append(string.Format("<a href='?pageIndex={0}'>{0}</a>",i));
41                }
42            }
43            if (pageIndex <pageCount)
44            {
45                sb.Append(string.Format("<a href='?pageIndex={0}'>下一页</a>", pageIndex +1));
46            }
47            return sb.ToString();
48        }
49     }
原文地址:https://www.cnblogs.com/liuweiqiang11188/p/6684863.html