LINQ to SQL HtpHandler封面水印

HtpHandler封面水印
目标

数字水印

全局水印

数字水印——HttpModule和HttpHandler

管道模型是由多个HttpModule和HttpHandler组成,ASP.NET把HTTP请求依次传递给管道中的各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中HTTP模块,把结果返回给客户端。可以在每个HttpModule干预请求的处理过程。

封面数字水印的实现(指定Handler方式)

步骤1:打开“Microsoft Visual Studio 2010”点击“新建”文件,选择“项目”弹出“新建项目”模版,在模版中选择“.NET framework 3.5”,在已安装列中选择“Web”,选择“ASP.NET Web 应用程序”。


步骤2:点击“确定”按钮,在“WebApplication1”右键点击选择添加“新建项目”弹出“添加新项”模版,在“已安装模版”中选择“Web”,之后模版列中找到“一般处理程序”,然后点击“添加”。

步骤3:添加完成之后,在“WebApplication1”选择“Handler1.ashx”双击,弹出代码,然后再代码中编辑即可。

步骤4:添加的代码如下:

Handler1.ashx.cs的后台代码:

 public void ProcessRequest(HttpContext context)
        {
            //默认图片的路径
            string path = "~/ProductImgs/";
            //获取要添加数字水印的图片物理路径
            string file = context.Request.MapPath(path + context.Request.QueryString["id"] + ".jpg");
            Image img = null;
            //判断相应的路径文件是否存在,不存在则使用默认图片
            if (File.Exists(file))
            {
                //加载文件
                img = Image.FromFile(file);
                //实例化画布
                Graphics graphics = Graphics.FromImage(img);
                //在Image上绘制水印字体
                graphics.DrawString("宝贝", new Font("华文琥珀", 20), Brushes.Red, img.Width-50,img.Height-30);
                graphics.DrawString("亲亲", new Font("华文彩云", 20), Brushes.Red, 0, 0);
                //释放画布
                graphics.Dispose();
            }
            else
            {

            }
            //设置输出类型为jpeg图片
            context.Response.ContentType = "image/jpeg";
            //将修改的图片存入输入流
            img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            //销毁
            img.Dispose();
            context.Response.End();//终止
        }



Default.aspx的控件:


<body>
    <form id="form1" runat="server">
    <div>
        <img alt="" class="style1" src="ProductImgs/1.jpg" />
        <img alt="" class="style2" src="ProductImgs/2.jpg" />
        <img alt="" class="style1" src="ProductImgs/3.jpg" />
        <img alt="" class="style2" src="ProductImgs/4.jpg" />
    </div>
    <div>
        <img alt="" class="style1" src="ProductImgs/1.bmp" />
        <img alt="" class="style2" src="ProductImgs/2.jpg" />
        <img alt="" class="style1" src="ProductImgs/3.jpg" />
        <img alt="" class="style2" src="ProductImgs/4.jpg" />
    </div>
    </form>
</body>


运行结果如下:



数字封面的实现(全局Handler方式)


需要有以下处理:

1.修改web.confing,将所有对.jpg内容的访问转到Handler处理程序。

2.获得访问请求,得到用户访问的图片路径。

3.根据请求的路径查找相对应的封面图片。

4.将网站标识在封面图片的左下角输出。

5.修改程序的输出的类型,并将组合出新的图片输出。

先在Web.confing文件添加以下代码:

<httpHandlers>
        <add verb="*" path="ProductImgs/*.jpg,ProductImgs/*.bmp" type="WebApplication1.Handler1" validate="false"/>

</httpHandlers>

1.) verb:指定谓词列表可以是逗号分隔的HTTP谓词列表(例如:“GET, PUT, POST”)。

[*]通配符,此处标识所有的请求。

2.) path:指定路径数zing可以包含单个URL路径或简单的通配符字符串(如*.aspx).

3.) type:指定逗号分隔的类/程序集组合。ASP.NET首先在应用程序的专用\bin目录中搜索程序集dll,然后在系统程序缓存中搜集程序集dll。

Default.aspx控件:

<body>
    <form id="form1" runat="server">
    <div>
        <img alt="" class="style1" src="ProductImgs/1.jpg" />
        <img alt="" class="style2" src="ProductImgs/2.jpg" />
        <img alt="" class="style1" src="ProductImgs/3.jpg" />
        <img alt="" class="style2" src="ProductImgs/4.jpg" />
    </div>
    <div>
        <img alt="" class="style1" src="Handler1.ashx?id=1" />
        <img alt="" class="style2" src="Handler1.ashx?id=2" />
        <img alt="" class="style1" src="Handler1.ashx?id=3" />
        <img alt="" class="style2" src="Handler1.ashx?id=4" />
    </div>
    </form>
</body>

Web.confing添加的代码:

<httpHandlers>
        <add verb="*" path="ProductImgs/*.jpg,ProductImgs/*.bmp" type="WebApplication1.Handler1" validate="false"/>

</httpHandlers>


全局水印Handler1.ashx.cs后台代码:

 public void ProcessRequest(HttpContext context)
        {
            //全局水印
            string file = context.Request.PhysicalPath;
            Image img = null;
            //判断相应的路径文件是否存在,不存在则使用默认图片
            if (File.Exists(file))
            {
                //加载文件
                img = Image.FromFile(file);
                //实例化画布
                Graphics graphics = Graphics.FromImage(img);
                //在Image上绘制水印字体
                graphics.DrawString("宝贝", new Font("华文琥珀", 20), Brushes.Red, img.Width-50,img.Height-30);
                graphics.DrawString("亲亲", new Font("华文彩云", 20), Brushes.Red, 0, 0);
                //释放画布0.
                graphics.Dispose();
            }
            else
            {

            }
            //设置输出类型为jpeg图片
            context.Response.ContentType = "image/jpeg";
            //将修改的图片存入输入流
            img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            //销毁
            img.Dispose();
            context.Response.End();//终止
        }


运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值