HttpHandler验证码及水印

一、HttpHandler验证码
创建web项目添加HTTPHandler类继承IHttpHandler和IRequiresSessionState

        public void ProcessRequest(HttpContext context)
        {
            Random rand = new Random();
            int len = rand.Next(4, 6);
            char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
            StringBuilder myStr = new StringBuilder();
            for (int iCount = 0; iCount < len; iCount++)
            {
                myStr.Append(chars[rand.Next(chars.Length)]);
            }
            string text = myStr.ToString();
            Size ImageSize = Size.Empty;
            Font myFont = new Font("MS Sans Serif", 20);
            // 计算验证码图片大小
            using (Bitmap bmp = new Bitmap(10, 10))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    SizeF size = g.MeasureString(text, myFont, 10000);
                    ImageSize.Width = (int)size.Width + 1;
                    ImageSize.Height = (int)size.Height + 1;
                }
            }
            using (Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    g.Clear(Color.White);
                    using (StringFormat f = new StringFormat())
                    {
                        f.Alignment = StringAlignment.Near;
                        f.LineAlignment = StringAlignment.Center;
                        f.FormatFlags = StringFormatFlags.NoWrap;
                        g.DrawString(
                            text,
                            myFont,
                            Brushes.Black,
                            new RectangleF(
                            0,
                            0,
                            ImageSize.Width,
                            ImageSize.Height),
                            f);
                    }
                }

                int num = ImageSize.Width * ImageSize.Height * 30 / 100;

                for (int iCount = 0; iCount < num; iCount++)
                {
                    int x = rand.Next(ImageSize.Width);
                    int y = rand.Next(ImageSize.Height);
                    int r = rand.Next(255);
                    int g = rand.Next(255);
                    int b = rand.Next(255);
                    Color c = Color.FromArgb(r, g, b);
                    bmp.SetPixel(x, y, c);
                }

                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                context.Response.ContentType = "image/Gif";
                context.Session["CheckCode"] = text;
                ms.WriteTo(context.Response.OutputStream);
                ms.Close();
            }
            myFont.Dispose();
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }

然后编写视图层代码

    <form id="form1" runat="server">
        <div>
            <table style="width:100%;" border="1" cellspacing="0" cellpadding="0">
                <tr>
                    <td>账号</td>
                    <td><asp:TextBox ID="txtAccount" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>验证码</td>
                    <td>
                        <asp:TextBox ID="txtCode" runat="server"></asp:TextBox>
                        <asp:Image ID="Image1" runat="server" ImageUrl="~/VerificationCode.cs" />
                        <asp:LinkButton ID="LinkButton1" runat="server">刷新</asp:LinkButton>
                    </td>
                </tr>
            </table>
            <asp:Button ID="btnSubmit" runat="server" Text="提交" style="margin-left:50%; margin-top:2%" OnClick="btnSubmit_Click" />
        </div>
        <asp:Label ID="lblMessge" runat="server" Text=""></asp:Label>
    </form>

在aspx.cs中编写如下代码

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (System.Web.HttpContext.Current.Session["CheckCode"] != null)
            {
                lblMessge.Text = System.Web.HttpContext.Current.Session["CheckCode"] as string;
                Console.WriteLine("登录成功");
            }
            else
            {
                lblMessge.Text = "验证码不正确";
            }
        }

最后在Web.config中写配置文件

    <system.webServer>
		<handlers>
			<add verb="*" path="WebApplication2/*.aspx" name="handler" type="WebApplication2.VerificationCode"/>
		</handlers>
	</system.webServer>

二、HttpHandler实现水印
创建web项目并新建Images文件夹,添加图片
()R1D`3TBH8N655GT4T8Q7O.png
编写HttpHdanler类

    public class TestHandler : IHttpHandler
    {
        //水印图片
        private const string WATERMARK_URL = "~/Images/watermark.png";
        //图片不存在,默认下显示图片
        private const string DEFAULTIMAGE_URL = "~/Images/1.jpg";

        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            //得到请求图片的物理路径
            string imgFilePath = context.Request.MapPath(context.Request.FilePath);
            //判断文件是否存在
            if (File.Exists(imgFilePath))
            {
                //根据图片路径实例化图片对象
                Image img = Image.FromFile(imgFilePath);
                //实例化画布
                Graphics g = Graphics.FromImage(img);
                //实体化一个字体对象
                Font font = new Font("宋体", 12);
                //得到画刷对象,颜色为红色
                Brush brush = Brushes.Red;
                //得到一个点对象,表示画水印的位置
                Point point = new Point(0, 0);
                //画图
                g.DrawString("独家制作", font, brush, point);
                //设置响应类型
                context.Response.ContentType = "image/jpeg";
                //将画好的图片,输出到响应流
                img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                //释放资源
                img.Dispose();
                g.Dispose();
                //结束响应
                context.Response.End();

            }

在视图层添加图片

 <div>
            <img   src="Images/1.jpg" />
            <img  src="Images/2.jpg" />
            <img   src="Images/3.jpg" />
 </div>

最后在Web.config中写配置文件

    <system.webServer>
		<handlers>
			<add verb="*" path="Images/*.jpg" name="handler" type="_5._4.TestHandler"/>
		</handlers>
	</system.webServer>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值