您的位置:首页 > 理论基础 > 计算机网络

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

2012-12-14 09:45 323 查看
只要实现IHttpHandler接口就可以截获图片请求,实现自动加水印的功能。

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

usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Drawing.Imaging;
usingSystem.IO;
usingSystem.Web;

namespaceMySite
{
publicclassImageHandler:IHttpHandler
{
#regionIHttpHandlerMembers

publicvoidProcessRequest(HttpContextcontext)
{
context.Response.ContentType="image/jpeg";
stringpath=context.Request.PhysicalPath;//获取请求的图片在服务器的上的物理路径
if(File.Exists(path))
{
Imageimage=Image.FromFile(path);
if(image.Width>400&image.Height>400)//对于长宽都大于400px的图片才加水印
{
Graphicsg=Graphics.FromImage(image);
g.SmoothingMode=SmoothingMode.HighQuality;
g.DrawString("水印文字",newFont("宋体",22,FontStyle.Bold),newSolidBrush(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();
}

publicboolIsReusable
{
get{returnfalse;}
}

#endregion
}


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

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



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


这样,对应jpg文件的请求都在ImageHandler类处理,具体需要其他功能比如缩略图等只要加上代码都可以处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: