创建一个CoverHandler类实现IHttpHandler
using System;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
/// <summary>
///CoverHandler 的摘要说明
/// </summary>
publicclassCoverHandler:IHttpHandler
{
//数字水印路径
privateconststring WATEMARK_URL ="~/Images/WaterMark.jpg";
//默认图片的路径
privateconststring DEFAULT_URL ="~/Images/default.jpg";
publicCoverHandler()
{
}
#region IHttpHandler 成员
publicvoidProcessRequest(HttpContext context)
{
System.Drawing.Image Cover;
if(File.Exists(context.Request.PhysicalPath))
{
//加载文件
Cover = Image.FromFile(context.Request.PhysicalPath);
//加载水印图片
Image watemark = Image.FromFile(context.Request.MapPath(WATEMARK_URL));
//实例化画布
Graphics g = Graphics.FromImage(Cover);
//在Cover上绘制水印
g.DrawImage(watemark,
newRectangle(Cover.Width - watemark.Width, Cover.Height - watemark.Height, watemark.Width, watemark.Height),
0,0, watemark.Width, watemark.Height, GraphicsUnit.Pixel);
//释放画布
g.Dispose();
//释放水印图片
watemark.Dispose();
}
else
{
Cover = Image.FromFile(context.Request.MapPath(DEFAULT_URL));
}
//设置输出格式
context.Response.ContentType ="image/jpeg";
//将图片存入输入流
Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Cover.Dispose();
context.Response.End();
}
publicbool IsReusable
{
get{returnfalse; }
}
#endregion
}
然后再配置文件中添加以下代码
1
2
3
|
<httpHandlers>
<add verb=
"*"
path=
"Images/BookCovers/*.jpg"
type=
"CoverHandler"
/>
</httpHandlers>
|
verb:代表谓词(比如:GET、POST、FTP)列表。可以写作“GET”,“POST”。“*”为通配符,表示所有请求。
path:访问路径。此处表示所有访问“Images/BookCovers/*.jpg “ 路径的请求都将交给CoverHandler类进行处理。“*”为通配符
type:指定的类/程序集组合
运行看下效果。OK了。发布IIS一看没效果,我们还需配置IIS。
点配置
点添加
点浏览,找一个名为aspnet_isapi.dll。注意要选择当前版本的aspnet_isapi.dll
扩展名 为jpg, 检查文件是否存在 前面的勾要去掉。然后就OK了。