IHttpHandler给图片添加水印
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-04-11
先给大家看几张熟悉的图片: 上面这些图片大家不熟悉,不过如果大家留心一下就会发现每张图片上都有一些有关网站的信息,只不过第一张和第二张使用的是图片,第三张就是"life.netskycn.com"文字而已,这就是所谓的图片水印技术,它一般都是在原有图片上添加一些自己的标记(一般是网站网址),这样如果别的网站直接链接使用的话,则不可避免带上了自己网站的信息,相当于给自己网站做了广告。 最近本人也做了一个asp.net网站,做一个政府网站,网站管理人员发现以前很多新闻记者不打招呼就直接使用他们的新闻信息和图片,他们很恼火,于是要求我给他们的网站添加上水印,这样如果别人要用只能通过正式渠道来向他们索取而不是从网站上把图片存下来。 一般的做法是在上传图片时直接给图片添加上水印,由于我在项目中使用了FCKeditor,在上传时不易控制,同时对方还要求他们自己用时不能有水印,于是我就使用了在图片显示时动态添加水印的办法,另外,为了提高效率,还使用了缓存技术,这样不必每次都添加水印,节省时间和提高性能。 本文中使用到的类是IHttpHandler(准确地说是一个接口),msdn对它的定义是:“定义 ASP.NET 为使用自定义 HTTP 处理程序同步处理 HTTP Web 请求而实现的协定。”HTTP处理程序是实现了System.Web.IHttpHandler接口的.NET组件,任何实现了IHttpHandler接口的类都可以用于处理输入的HTTP请求。也就是每次我们请求asp.net网站上的资源,都会由这个请求处理,这样就好控制了。 我的做法是,实现IHttpHandler接口,由实现这个接口的ImageHandler类专门处理对图片资源的请求,第一次请求某个图片时,由于缓存中没有,就读取这个图片,添加上我们指定的水印(由web.config设置指定),然后把输出到客户端,同时也把它缓存一定时间,在缓存期内就再次请求这个图片就不用添加水印了,直接把缓存中的图片输出就行了。 首先我们要编写自己的类ImageHandler实现IHttpHandler接口,代码如下: using System; using System.Web; using System.Drawing; using System.Drawing.Imaging; /// <summary> /// 说明:ImageHandler是一个图片处理类,它能实时在在图片上添加水印,避免自己网站的图片别的网站盗用 /// 日期:2008-1-10 /// 首发地址:http://www.17aspx.com /// </summary> public class ImageHandler:IHttpHandler { public ImageHandler() { // // TODO: 在此处添加构造函数逻辑 // } #region IHttpHandler 成员 /// <summary> /// 指示IHttpHandler 实例是否可再次使用 /// </summary> public bool IsReusable { get { return true; } } /// <summary> /// 处理请求的方法 /// </summary> /// <param name="context">它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。</param> public void ProcessRequest(HttpContext context) { //获取请求的物理图片路径 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 防刷新次数增1的解决办法下一篇: .Net下的分布式缓存 - 分布式缓存同步的实现
关于IHttpHandler给图片添加水印的所有评论