ASP.NET为图片加上水印

为我们发布的图片加上一个水印,也是我们经常要做的事情,那怎么样来做呢,下面就一步步开始吧

首先是一个制作水印的类:ImageHandler,代码如下:

C#代码  
  1. using System;  
  2. using System.IO;  
  3. using System.Drawing;  
  4. using System.Drawing.Imaging;  
  5. using System.Data;  
  6. using System.Configuration;  
  7. using System.Linq;  
  8. using System.Web;  
  9. using System.Web.Security;  
  10. using System.Web.UI;  
  11. using System.Web.UI.HtmlControls;  
  12.   
  13. using System.Web.UI.WebControls.WebParts;  
  14. using System.Xml.Linq;  
  15.   
  16. /// <summary>  
  17. ///ImageHandler 的摘要说明  
  18. /// </summary>  
  19. public class ImageHandler:IHttpHandler  
  20. {  
  21.     private const string waterMark_URL = "~/Images/waterMark.jpg";  
  22.     private const string defaultImage_URL = "~/Images/Default.jpg";  
  23.   
  24.     public ImageHandler()  
  25.     {  
  26.         //  
  27.         //TODO: 在此处添加构造函数逻辑  
  28.         //  
  29.     }  
  30.   
  31.     public void ProcessRequest(HttpContext context)  
  32.     {  
  33.         System.Drawing.Image ImageConver;  
  34.         if (File.Exists(context.Request.PhysicalPath))  
  35.         {  
  36.             //加载文件  
  37.             ImageConver = Image.FromFile(context.Request.PhysicalPath);  
  38.             //加载水印图片  
  39.             Image waterMark = Image.FromFile(context.Request.MapPath(waterMark_URL));  
  40.             //重新画布  
  41.             Graphics g = Graphics.FromImage(ImageConver);  
  42.             g.DrawImage(waterMark, new Rectangle(ImageConver.Width - waterMark.Width, ImageConver.Height - waterMark.Height, waterMark.Width, waterMark.Height), 0, 0, waterMark.Width, waterMark.Height, GraphicsUnit.Pixel);  
  43.             g.Dispose();  
  44.             waterMark.Dispose();  
  45.         }  
  46.         else  
  47.         {  
  48.             ImageConver=Image.FromFile(context.Request.MapPath(defaultImage_URL));  
  49.         }  
  50.   
  51.         //设置输出格式  
  52.         context.Response.ContentType="image/jpeg";  
  53.         ImageConver.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);  
  54.         ImageConver.Dispose();  
  55.         context.Response.End();  
  56.     }  
  57.   
  58.     public bool IsReusable  
  59.     {  
  60.         get  
  61.         {  
  62.             return false;  
  63.         }  
  64.     }  
  65. }  

接下来,我们要做一个很关键的配置,那就是在Web.Config文件中加入如下一句话

<httpHandlers>

<!--图片水印-->
      <add verb="*" path="Images/*.jpg" type="ImageHandler"/>

</httpHandlers>