使用HttpHandler添加水印和制作验证码

目录

 

在照片上添加水印

如何添加水印

在web.config中配置相关配置文件:

水印效果:

制作验证码

验证码效果:


在照片上添加水印

在项目中创建TestHandler类,该类实现IHttpModule接口

 public class TestHandler: IHttpHandler
    {
        public bool IsReusable => throw new NotImplementedException();

        public void ProcessRequest(HttpContext context)
        {
            throw new NotImplementedException();
        }
    }

声明一个变量存在水印和图片不存在,默认显示的图片

    //水印图片
     private const string WATERMARK_URL = "~/images/logo.png";
     //图片不存在,默认显示的图片
     private const string DEFAULTIMAGE_URL = "~/images/wyz.jpg";

获取到用户请求图片的路径

  //获取到用户请求图片的路径
  string filePath = context.Request.PhysicalPath;
  System.Drawing.Image Cover;

如何添加水印

先要将我们获取到的图片放到画布上,然后往在画布上的图片添加水印,最后将图片输出:

       //加载文件
       Cover = Image.FromFile(filePath);
       //加载水印图片
       Image watermark = Image.FromFile(context.Server.MapPath(WATERMARK_URL));
       //实例化画布
       Graphics graphics = Graphics.FromImage(Cover);
                       //水印      水印位置 
       graphics.DrawImage(watermark, new Rectangle(100, 100, 200, 200));
       //释放画布
       graphics.Dispose();
       //释放水印图片
       watermark.Dispose();
       //设置输出格式
       context.Response.ContentType = "images/jpeg";
       //将图片存放输出流
       Cover.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
       Cover.Dispose();
       context.Response.End();

完整代码:

    public class TestHandler : IHttpHandler
    {
        public bool IsReusable => false;
        //水印图片
        private const string WATERMARK_URL = "~/images/logo.png";
        //图片不存在,默认显示的图片
        private const string DEFAULTIMAGE_URL = "~/images/王彦祖.jpg";
        public void ProcessRequest(HttpContext context)
        {
            //获取到用户请求图片的路径
            string filePath = context.Request.PhysicalPath;
            System.Drawing.Image Cover;
            //判断请求的物理路径中是否存在文件
            if (File.Exists(filePath))
            {
                //加载文件
                Cover = Image.FromFile(filePath);
                //加载水印图片
                Image watermark = Image.FromFile(context.Server.MapPath(WATERMARK_URL));
                //实例化画布
                Graphics graphics = Graphics.FromImage(Cover);
                                 //水印      水印位置 
                graphics.DrawImage(watermark, new Rectangle(100, 100, 200, 200));
                //释放画布
                graphics.Dispose();
                //释放水印图片
                watermark.Dispose();
            }
            else
            {
                //加载默认图片
                Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
            }
            //设置输出格式
            context.Response.ContentType = "images/jpeg";
            //将图片存放输出流
Cover.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
            Cover.Dispose();
            context.Response.End();

        }
    }

在web.config中配置相关配置文件:

<configuration>
  <system.webServer>
      <handlers>
        <add verb="*" path="images/*" name="h1" type="watermark.TestHandler"/>
      </handlers>
  </system.webServer>
</configuration>

在web窗体页面只要有一个image控件向服务器请求图片就会加上水印

 <div>
     <asp:Image ID="Image1" runat="server"  ImageUrl="~/images/nvshen1.jpg" />
 </div>

水印效果:

 

制作验证码

验证码和水印差不多就是在一个空白在画布添加验证码

先创建VerofocatopmCpde类,该类实现IHttpModule接口和该类实现IHttpModule接口

    public class VerofocatopmCpde : IHttpHandler, IRequiresSessionState
    {
        public bool IsReusable => throw new NotImplementedException();

        public void ProcessRequest(HttpContext context)
        {
            throw new NotImplementedException();
        }
    }
 public class VerofocatopmCpde : IHttpHandler, IRequiresSessionState
    {
        public bool IsReusable => false;

        //生成随机数对象
        private Random RandomSeed = new Random();
        public void ProcessRequest(HttpContext context)
        {
            Random r = new Random();
            //提供验证码使用的字符
            string strWord = "1234567890ABCDEFGHIJKLMNOPQRSTWUVXYZabcdefghyjklmnopqrstwuvxyz";
            //声明一个装载验证码的变量
            string NumStr = null;
            string N=null;
            //创建一个画板,设置宽高
            Bitmap b = new Bitmap(125, 40);
            //拿数组装一些字体
            string[] font = { "宋体", "Arial", "微软雅黑", "Verdana", "Comic Sans MS" };
            //画笔颜色(字体颜色)
            Brush[] color = { Brushes.Red, Brushes.Blue, Brushes.Pink,Brushes.Yellow,Brushes.Orange};
            //拿到画笔
            Graphics g = Graphics.FromImage(b);
            //清除画板,填充颜色
            g.Clear(Color.Green);
            //设置x轴
            int x = 0;
            for (int i = 0; i < 5; i++)
            {
                //生成随机验证码字符
                N = strWord[RandomSeed.Next(0, strWord.Length)].ToString();
                //在画板上画字(字符,new Font(字体,大小,样式),画笔颜色,位置)
                g.DrawString(N, new Font(font[r.Next(0, font.Length - 1)], r.Next(20, 25), FontStyle.Bold), color[r.Next(0, color.Length)], new Point(x, 0));
                //每加一个字,x轴就加20,往右边推
                x += 20;
                //将随机生成的字符拼接为字符串,形成验证码
                NumStr += N;
            }
            //将验证码保存到Session中用于后面对比
            context.Session["vcode"] = NumStr.ToLower();
            //保存到画板
            b.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        
    } 

验证码效果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值