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文件加上水印,实际上本地的图片还是原图,若要对gif、png等图片加上水印,可在逻辑代码添加。
配置Web.Config文件,使jpg文件通过自己的handler处理,这样请求jpg图片就自动加上水印。在System.Web节点添加如下配置即可。
<httpHandlers> <add path="*.jpg" type="MySite.ImageHandler" verb="*"/> </httpHandlers>
这样,对应jpg文件的请求都在ImageHandler类处理,具体需要其他功能比如缩略图等只要加上代码都可以处理。