EF的水印和验证码图制做

水印制作

创建IHttpHandler接口

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

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

编写水印代码

详细请看注释

public class HttpHandler : IHttpHandler
    {
        public bool IsReusable => false;

        public void ProcessRequest(HttpContext context)
        {
        	//创建一个画板,把获取到的图片放到画板上
            Bitmap bitmap = new Bitmap(context.Request.PhysicalPath);
            //创建画笔,准备在画板是绘画
            Graphics graphics = Graphics.FromImage(bitmap);
            //获取水印图片
            Image image = Image.FromFile(context.Server.MapPath("shui.png"));
            //水印图片放置的位置,用画板的宽高减去水印图片的宽高看水印图片位置是否合适不合适自己调节
            graphics.DrawImage(image, new Point(bitmap.Width-image.Width+10, bitmap.Height - image.Height+10));
			//清除画笔
            graphics.Flush();
            //将图片存为输出流
            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            //把图片输出至浏览器
            context.Response.WriteFile(context.Request.PhysicalPath);
        }
    }

配置配置文件

在configuration节点下编写

<system.webServer>
    <handlers>
      <add verb="*" path="images/*" type="水印.HttpHandler" name="sy"/>
    </handlers>
  </system.webServer>

创建两个web窗体

放入两个图片标签,写入路径(使用服务器控件也行)

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

最终实现页面

最终实现页面

验证码图制作

创建IHttpHandler接口(同水印接口一样)

编写验证码代码

详细请看注释

public class Class1 : IHttpHandler,IRequiresSessionState
    {
        public bool IsReusable => false;

        public void ProcessRequest(HttpContext context)
        {
        	//创建一个宽300,高100的的画板
            Bitmap bitmap = new Bitmap(300,100);
            //创建画笔准备在画板上写验证码
            Graphics graphics = Graphics.FromImage(bitmap);
            //随机生成数
            Random random = new Random();
            //在这些里面随机生成一个五位数的验证码
            string sj ="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
            //给每一个验证码随机生成字体
            string[] zt = new string[] { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
            //创建一个字符类型接收每一个验证码
            char sui ;
            //创建一个string类型把所有验证码整合
            string suij="";
            //创建一个string类型接收一个随机生成的字体
            string font = "";
            //创建一个Brush数组随机生成颜色
            Brush[] ys = new Brush[]{ Brushes.Blue, Brushes.Yellow, Brushes.Pink, Brushes.Red, Brushes.Green, Brushes.Orange, Brushes.Purple };
            //清除背景颜色,新建一个背景色
            graphics.Clear(Color.DarkGray);
            for (int i = 0; i < 5; i++)
            {
            	//随机生成一个数,给到y轴位置
                int FWY = random.Next(1, 50);
                //随机生成一个数,给到x轴位置,由于有顺序创建五个随机数不打乱顺序
                int fwX1 = random.Next(1, 50);
                int fwX2 = random.Next(55, 100);
                int fwX3 = random.Next(105, 150);
                int fwX4 = random.Next(155, 200);
                int fwX5 = random.Next(205, 255);
                //接收字体生成的随机数
                font = zt[random.Next(i, zt.Length)];
                //接收随机生成数
                sui = sj[random.Next(i, sj.Length)];
                //把随机生成数整合
                suij += sui;
                //判断循环数让每一个验证码都有随机生成的样式
                if (i == 0)
                {
                	//画笔开始画验证码
                    graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX1, FWY));
                }
                else if (i == 1)
                {
                    graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX2, FWY));
                }
                else if (i == 2)
                {
                    graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX3, FWY));
                }
                else if (i == 3)
                {
                    graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX4, FWY));
                }
                else if (i == 4)
                {
                    graphics.DrawString(sui.ToString(), new Font(font, 30), ys[random.Next(0, ys.Length)], new Point(fwX5, FWY));
                }
                //随机生成噪点
                for (int j = 0; j < 50; j++)
                {
                    int x = random.Next(bitmap.Width);
                    int y = random.Next(bitmap.Height);
                    graphics.DrawRectangle(new Pen(ys[random.Next(0, ys.Length)], 0), x, y, 1, 1);                }
            }
            //把整合验证码放入session,为了方便验证(验证还未写)
            context.Session["sjs"] = suij;
            //清除画笔
            graphics.Flush();
            //把图片存为输出流,返回至客户端
            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        }

验证码最终效果图

验证码最终效果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泽痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值