Asp.net全站图片加水印:实现IHttpHandler接口

只要实现IHttpHandler接口就可以截获图片请求,实现自动加水印的功能。

首先,创建一个类,实现IHttpHandler接口,在ProcessRuquest方法下实现具体图片加水印逻辑,代码如下:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
 
namespace MySite
{
    public class ImageHandler : IHttpHandler
    {
        #region IHttpHandler Members
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            string path = context.Request.PhysicalPath;//获取请求的图片在服务器的上的物理路径
            if (File.Exists(path))
            {
                Image image = Image.FromFile(path);
                if (image.Width > 400 & image.Height > 400)//对于长宽都大于400px的图片才加水印
                {
                    Graphics g = Graphics.FromImage(image);
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.DrawString("水印文字", new Font("宋体", 22, FontStyle.Bold), new SolidBrush(Color.Aquamarine), 0, 0);
                    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
                    g.Dispose();
                }
                image.Dispose();
            }
            else
            {
                context.Response.StatusCode = 404;
            }
            context.Response.Flush();
            context.Response.End();
        }
 
        public bool IsReusable
        {
            get { return false; }
        }
 
        #endregion
}

 

 

这里只是对请求的jpg文件加上水印,实际上本地的图片还是原图,若要对gifpng等图片加上水印,可在逻辑代码添加。  

配置Web.Config文件,使jpg文件通过自己的handler处理,这样请求jpg图片就自动加上水印。在System.Web节点添加如下配置即可。

 
<httpHandlers>   
      <add    path="*.jpg" type="MySite.ImageHandler" verb="*"/>
    </httpHandlers>

这样,对应jpg文件的请求都在ImageHandler类处理,具体需要其他功能比如缩略图等只要加上代码都可以处理。

posted @ 2012-12-14 09:45  忽如远行客  阅读(463)  评论(1编辑  收藏  举报