Loading

全局的一般处理程序 --图片添加水印

   指定当用户调用某个文件夹中的文件时,自动转向这个一般处理程序。
    步骤:1> 新建一个类。继承 IHttpHandler接口。
            2> web.config  ,在<httpHandlers>节点中,<add verb="*" path="images/Covers/*.jpg" type="命名空间.类名">  
                 verb是动作,如"GET""POST""HEAD""DEBUG""*"     ,"*"表示所有请求
                 path应用的目录【images/Covers】及文件格式【*.jpg】
                 type当用户以vert指定的方式请求path指定的文件时,转交给哪个类来处理。注意命名格式:命名空间.类名
      这个可以进行权限的精确控制,上传图片的时候就加上水印,缺点,原图破坏,优点:省资源。

 

    public class WaterMark :IHttpHandler
    {
        #region IHttpHandler 成员


        private const string WATERMARK_URL = "~/Images/watermark.jpg";        //水印图片
        private const string DEFAULTIMAGE_URL = "~/Images/default.jpg";       //图片不存在,默认显示的图片
        

        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
//得到用户请求的图片
            string filePath = context.Request.PhysicalPath;//请求路径
System.Drawing.Image Cover; //判断请求的物理路径中,是否存在文件 if (File.Exists(filePath)) { //加载文件 Cover = Image.FromFile(filePath); //加载水印图片 Image watermark = Image.FromFile(context.Server.MapPath(WATERMARK_URL)); //实例化画布 Graphics g = Graphics.FromImage(Cover); //在image上绘制水印 g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel); //释放画布 g.Dispose(); //释放水印图片 watermark.Dispose(); } else { //加载默认图片 Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL)); } //设置输出格式 context.Response.ContentType = "image/jpeg"; //将图片存入输出流 Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); Cover.Dispose(); context.Response.End(); } #endregion }

 

    <httpHandlers>
       <add verb="*"  path="images/BookCovers/*.jpg" type="BookShop.Web.Common.WaterMark"/>
    </httpHandlers>

 

posted @ 2012-07-16 13:14  The Mechanic  阅读(450)  评论(0编辑  收藏  举报