第一种实现方法: --- 利用IHttpHandler
-
添加新建项 -- 一般处理程序
-
<%@ WebHandler Language="C#" Class="JPGHandler" %>
using System;
using System.Web;
using System.Drawing;
public class JPGHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
// ①加载将要水印的图片
Image img = Image.FromFile(context.Server.MapPath("~/img/BookCovers/9293450.jpg"));
// ②加载水印图片
Image watermark = Image.FromFile(context.Request.MapPath("~/img/WaterMark.jpg"));
// ③实例化画布
Graphics g = Graphics.FromImage(img);
// ④在image上绘制水印
g.DrawImage(watermark, new Rectangle(img.Width - watermark.Width, img.Height - watermark.Height, watermark.Width, watermark.Height));
// ⑤释放画布
g.Dispose();
// ⑥释放水印图片
watermark.Dispose();
// ⑦设置输出类型为JPEG图片
context.Response.ContentType = "image/jpeg";
// ⑧将修改的图片存入输出流
img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
// ⑨释放图片
img.Dispose();
// 最后: 清空缓存,发送Response
context.Response.End();
}
public bool IsReusable {
get {
return true;
}
}
}
-
第二种实现方法: -- 全局Handler方式
-
修改配置文件
<httpHandlers>
<add verb="*" path="img/BookCovers/*.jpg" type="ImgHandler"/>
</httpHandlers> -
编写handler类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Drawing;
/// <summary>
///ImgHandler 的摘要说明
/// </summary>
public class ImgHandler:IHttpHandler
{
public ImgHandler()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IHttpHandler 成员
public bool IsReusable
{
get { return false; }
}
private const string WATER_URL = "~/img/WaterMark.jpg";
private const string DEFAULT_URL = "~/img/default.jpg";
public void ProcessRequest(HttpContext context)
{
Image img = null;
if (File.Exists(context.Request.PhysicalPath))
{
img = Image.FromFile(context.Request.PhysicalPath);
Image water = Image.FromFile(context.Request.MapPath(WATER_URL));
Graphics g = Graphics.FromImage(img);
g.DrawImage(water, new Rectangle(img.Width - water.Width, img.Height - water.Height, water.Width, water.Height));
g.Dispose();
water.Dispose();
}
else
{
img = Image.FromFile(context.Request.MapPath(DEFAULT_URL));
}
context.Response.ContentType = "image/jpeg";
img.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
img.Dispose();
context.Response.End();
}
#endregion
}
-