数字水印
全局水印
数字水印——HttpModule和HttpHandler
管道模型是由多个HttpModule和HttpHandler组成,ASP.NET把HTTP请求依次传递给管道中的各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中HTTP模块,把结果返回给客户端。可以在每个HttpModule干预请求的处理过程。
封面数字水印的实现(指定Handler方式)
步骤1:打开“Microsoft Visual Studio 2010”点击“新建”文件,选择“项目”弹出“新建项目”模版,在模版中选择“.NET framework 3.5”,在已安装列中选择“Web”,选择“ASP.NET Web 应用程序”。
步骤2:点击“确定”按钮,在“WebApplication1”右键点击选择添加“新建项目”弹出“添加新项”模版,在“已安装模版”中选择“Web”,之后模版列中找到“一般处理程序”,然后点击“添加”。
步骤3:添加完成之后,在“WebApplication1”选择“Handler1.ashx”双击,弹出代码,然后再代码中编辑即可。
步骤4:添加的代码如下:
Handler1.ashx.cs的后台代码:
public void ProcessRequest(HttpContext context)
{
//默认图片的路径
string path = "~/ProductImgs/";
//获取要添加数字水印的图片物理路径
string file = context.Request.MapPath(path + context.Request.QueryString["id"] + ".jpg");
Image img = null;
//判断相应的路径文件是否存在,不存在则使用默认图片
if (File.Exists(file))
{
//加载文件
img = Image.FromFile(file);
//实例化画布
Graphics graphics = Graphics.FromImage(img);
//在Image上绘制水印字体
graphics.DrawString("宝贝", new Font("华文琥珀", 20), Brushes.Red, img.Width-50,img.Height-30);
graphics.DrawString("亲亲", new Font("华文彩云", 20), Brushes.Red, 0, 0);
//释放画布
graphics.Dispose();
}
else
{
}
//设置输出类型为jpeg图片
context.Response.ContentType = "image/jpeg";
//将修改的图片存入输入流
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
//销毁
img.Dispose();
context.Response.End();//终止
}
<body>
<form id="form1" runat="server">
<div>
<img alt="" class="style1" src="ProductImgs/1.jpg" />
<img alt="" class="style2" src="ProductImgs/2.jpg" />
<img alt="" class="style1" src="ProductImgs/3.jpg" />
<img alt="" class="style2" src="ProductImgs/4.jpg" />
</div>
<div>
<img alt="" class="style1" src="ProductImgs/1.bmp" />
<img alt="" class="style2" src="ProductImgs/2.jpg" />
<img alt="" class="style1" src="ProductImgs/3.jpg" />
<img alt="" class="style2" src="ProductImgs/4.jpg" />
</div>
</form>
</body>

运行结果如下:
数字封面的实现(全局Handler方式)
需要有以下处理:
1.修改web.confing,将所有对.jpg内容的访问转到Handler处理程序。
2.获得访问请求,得到用户访问的图片路径。
3.根据请求的路径查找相对应的封面图片。
4.将网站标识在封面图片的左下角输出。
5.修改程序的输出的类型,并将组合出新的图片输出。
先在Web.confing文件添加以下代码:
<httpHandlers>
<add verb="*" path="ProductImgs/*.jpg,ProductImgs/*.bmp" type="WebApplication1.Handler1" validate="false"/>
</httpHandlers>
1.) verb:指定谓词列表可以是逗号分隔的HTTP谓词列表(例如:“GET, PUT, POST”)。
[*]通配符,此处标识所有的请求。
2.) path:指定路径数zing可以包含单个URL路径或简单的通配符字符串(如*.aspx).
3.) type:指定逗号分隔的类/程序集组合。ASP.NET首先在应用程序的专用\bin目录中搜索程序集dll,然后在系统程序缓存中搜集程序集dll。
Default.aspx控件:
<body>
<form id="form1" runat="server">
<div>
<img alt="" class="style1" src="ProductImgs/1.jpg" />
<img alt="" class="style2" src="ProductImgs/2.jpg" />
<img alt="" class="style1" src="ProductImgs/3.jpg" />
<img alt="" class="style2" src="ProductImgs/4.jpg" />
</div>
<div>
<img alt="" class="style1" src="Handler1.ashx?id=1" />
<img alt="" class="style2" src="Handler1.ashx?id=2" />
<img alt="" class="style1" src="Handler1.ashx?id=3" />
<img alt="" class="style2" src="Handler1.ashx?id=4" />
</div>
</form>
</body>

Web.confing添加的代码:
<httpHandlers>
<add verb="*" path="ProductImgs/*.jpg,ProductImgs/*.bmp" type="WebApplication1.Handler1" validate="false"/>
</httpHandlers>
全局水印Handler1.ashx.cs后台代码:
public void ProcessRequest(HttpContext context)
{
//全局水印
string file = context.Request.PhysicalPath;
Image img = null;
//判断相应的路径文件是否存在,不存在则使用默认图片
if (File.Exists(file))
{
//加载文件
img = Image.FromFile(file);
//实例化画布
Graphics graphics = Graphics.FromImage(img);
//在Image上绘制水印字体
graphics.DrawString("宝贝", new Font("华文琥珀", 20), Brushes.Red, img.Width-50,img.Height-30);
graphics.DrawString("亲亲", new Font("华文彩云", 20), Brushes.Red, 0, 0);
//释放画布0.
graphics.Dispose();
}
else
{
}
//设置输出类型为jpeg图片
context.Response.ContentType = "image/jpeg";
//将修改的图片存入输入流
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
//销毁
img.Dispose();
context.Response.End();//终止
}
运行结果:
