使用HttpHandle对象实现水印和验证码

水印

创建项目,创建前端网页

创建一个项目:在其中创建一个WebForm:WebForm1.aspx 页面
为了方便看效果我们就在页面上放两个img来显示图片,代码如下:


<body>
    <form id="form1" runat="server">
        <div>
            <img src="images/54.jpg"/>
            <img src="images/53.jpg"/>
        </div>
    </form>
</body>

​

创建HttpHandle类

接下来,创建一个HttpHandle类,并实现IHttpHandle接口,代码如下:

 public bool IsReusable => false;

        public void ProcessRequest(HttpContext context)
        {
            //获取源文件物理路径
            string url = context.Request.PhysicalPath;
            //创建画板
            Bitmap bitm = new Bitmap(url);
            //拿到画笔
            Graphics g =Graphics.FromImage(bitm);
            //作画 Font字体样式,Brushes 刷子颜色 Point坐标30是X轴,5是Y轴
            g.DrawString("斗地主",new Font("宋体",20,FontStyle.Bold),Brushes.Red,new Point(30,5));
            //立即执行
            g.Flush();
            //返回画好的图片
            bitm.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
        }

配置Web.config

写完HttpHandle类后要记得配置Web.config文件,要不然无效,代码如下:

<system.webServer>
  <handlers>
    <add verb="*" name="c1" path="images/*.jpg" type="WebApplication1.Class1"/>
  </handlers>
</system.webServer>

以下就是我的效果图:

验证码

创建项目,创建前端网页

在原项目中创建一个WebForm:WebForm2.aspx 页面
前端代码如下:

<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="请输入验证码"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Image ID="Image1" runat="server"  ImageUrl="~/Handler1.ashx"/>
            <asp:Button ID="Button1" runat="server" Text="验证" OnClick="Button1_Click" />
            <asp:Label ID="Label2" runat="server" ForeColor="red"></asp:Label>
        </div>
    </form>
</body>

这里Image标签的ImagesUrl引入HttpHandler类就可以了,系统运行到这里会调用HttpHandler类处理。

右键项目>添加>新建项目>Web选项下面(或者Web的常规选项)>一般处理程序>添加

这也是HttpHandle类,配置文件系统会配置好

类文件代码如下:

        //生成随机数
        private Random random = new Random();

        public bool IsReusable => false;

        public void ProcessRequest(HttpContext context)
        {
            //定义验证码数据源
            string[] str = {"1","2","3","4","5","6","7","8","9","0","q","w","e","r","t","y"
            ,"u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","Q","W","E","R","T","Y"
            ,"U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"
            };
            //声明装字符的变量
            String numstr = null;
            //获取四个随机加载的字符
            for (int i = 1; i < 5; i++)
            {
                numstr += str[random.Next(0, str.Length)];
            }
            context.Session["code"] = numstr;//保存到session中,整个网站中都能访问到,退出清除,重新生成
            Create(context, numstr);
        }
        public void Create(HttpContext context, string code)
        {
            //定义宽度 code是验证码的长度
            int cwidth = (int)(code.Length * 30);
            //创建一个画板,设置宽高
            Bitmap bitmap = new Bitmap(cwidth, 50);
            //拿到画笔
            Graphics g = Graphics.FromImage(bitmap);
            //定义颜色
            Color[] colors = { Color.Red, Color.Blue, Color.Cyan, Color.Yellow };
            //定义字体格式
            string[] font = { "隶书", "宋体", "Arial", "微软雅黑" };
            Random rand = new Random();//随机数
            //生成随机噪点
            for (int i = 1; i <= code.Length; i++)
            {
                int x = rand.Next(bitmap.Width);
                int y = rand.Next(bitmap.Height);
                g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
            }
            //输出不同字体颜色的验证码字符
            for (int i = 0; i < code.Length; i++)
            {
                int xx = rand.Next(4);
                int yy = rand.Next(4);
                Font f = new Font(font[xx], 30, FontStyle.Bold);
                Brush b = new SolidBrush(colors[yy]);
                int ii = 4;
                if ((i + 1) % 2 == 0)
                {
                    ii = 2;
                }
                g.DrawString(code[i].ToString(), f, b, (i * 27), ii);
            }
            //画个边框
            g.DrawRectangle(new Pen(ColorTranslator.FromHtml("#CCCCCC"), 0), 0, 0, bitmap.Width - 1, bitmap.Height - 1);
           //返回客户端
            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        }

下面是我的运行结果:

后端代码:

   protected void Button1_Click(object sender, EventArgs e)
        {
            if (Session["code"].ToString() == TextBox1.Text)
            {
                Label2.Text = "验证成功";
                Image1.ImageUrl = "";
            }
            else
            {
                Label2.Text = "验证码不匹配";
            }
        }

执行效果:

验证码成功后隐藏了验证码的输出地址

以上就是我本次的全部内容,希望能够帮助到大家~
如果哪里有不对的地方请随时联系我,我会加以改正~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值