码迷,mamicode.com
首页 > Web开发 > 详细

ASP.Net一般处理程序生成动态验证码

时间:2018-02-05 23:33:19      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:from   process   dom   void   public   width   bitmap   div   roc   

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;

namespace 动态验证码生成
{
    /// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            
            var bmp = GetVerCode();

            bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);

            //context.Response.Write("Hello World");
        }
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <returns></returns>
        private static Bitmap GetVerCode()
        {
            Random r = new Random();
            string str = null;
            for (int i = 0; i < 4; i++)
            {
                int rNumber = r.Next(0, 10);
                str += rNumber;
            }

            //创建GDI对象
            Bitmap bmp = new Bitmap(100, 40);
            Graphics g = Graphics.FromImage(bmp);

            for (int i = 0; i < 4; i++)
            {
                Point p = new Point(i * 20, 0);
                string[] fonts = {"微软雅黑", "宋体", "黑体", "隶书"};
                Color[] colors = {Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green};
                g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 4)], 20, FontStyle.Bold),
                    new SolidBrush(colors[r.Next(0, 4)]), p);
            }

            for (int i = 0; i < 20; i++)
            {
                Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                g.DrawLine(new Pen(Brushes.Green), p1, p2);
            }

            for (int i = 0; i < 500; i++)
            {
                Point p = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                bmp.SetPixel(p.X, p.Y, Color.Black);
            }
            return bmp;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

技术分享图片

ASP.Net一般处理程序生成动态验证码

标签:from   process   dom   void   public   width   bitmap   div   roc   

原文地址:https://www.cnblogs.com/lolitagis/p/8419546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!