在ASP.NET中可以很方便的创建HttpHandler的应用,现在使用HttpHandler来为图片增加水印。
数字水印的实现有3种方法:
1.直接编辑每张图片 需要大量的人力
2.编程实现批量编辑图片 效率高,不需要大量的人力,但是原图片会丢失
3.在显示图片时,动态添加数字水印效果 使用 HttpHandler
在不修改任何访问路径的情况下实现图片的数字水印效果需要做一下处理
1.修改配置信息,将所有对.JPG内容的访问转到HttpHandler处理程序
2.获得访问请求,得到用户访问的图片路径;
3.根据请求的路径,查找相对应的DVD封面图片;
4.将网站标识“绘制”在DVD封面图片的左下角;
5.修改程序的输出类型,并将组合出的新图片输出。
修改Web.config文件,在文件中添加代码行:
<httpHandlers> <add verb="*" path="ProductImgs/*.jpg" type="PicCoverHandler"/> </httpHandlers>
verb:指定谓词列表可以用逗号隔开的HTTP谓词列表,例如:谓词GET、POST、FTP等,。
[*]通配符,此处表示所有请求
path:访问路径可以包含单个URL路径或简单的通配符字符串(比如:*.aspx),此处表示所有针对“ProductImgs/*.jpg”路径的的请求都将交给PicCoverHandler类进行处理。
type:指定的处理程序(类)
一个图片加水印的例子:
在添加新项中添加一般处理程序,创建一个后缀名为.ashx的文件。
前台HTML:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> .style1 { width: 183px; height: 238px; } .style2 { width: 182px; height: 238px; } .style3 { width: 132px; height: 59px; } </style> </head> <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" /> <img alt="" class="style1" src="ProductImgs/4.bmp" /> <img alt="" class="style3" src="ProductImgs/5.jpg" /> </div> <div> <img alt="" class="style1" src="Product/1.jpg" /> <img alt="" class="style2" src="Product/2.jpg" /> <img alt="" class="style1" src="Product/3.jpg" /> <img alt="" class="style2" src="Product/4.jpg" /> <img alt="" class="style3" src="Product/5.jpg" /> </div> </form> </body> </html>
后台一般程序处理:Handler1.ashx:
public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { //tring omg = "~/ProductImgs/"; //获取物理地址 string lpl = context.Request.PhysicalPath; //获取图片储存地址 //string lpl = context.Request.MapPath(omg + context.Request.QueryString["id"]+".jpg"); Image img = null; if (File.Exists(lpl)) { img = Image.FromFile(lpl); //转化成画布 Graphics grap = Graphics.FromImage(img); //水印位于左上角 grap.DrawString("maple专属", new Font("隶书", 15), Brushes.Pink, 0, 0); //水印位置右下角 grap.DrawString("maple专属", new Font("隶书", 15), Brushes.Red, img.Width-80, img.Height-20); grap.Dispose(); } else { } context.Response.ContentType=("image/jpeg"); //将修改后的图片存入输出流 img.Save(context.Response.OutputStream,ImageFormat.Jpeg); img.Dispose(); context.Response.End(); } public bool IsReusable { get { return false; } } }
将Web.config文件中的httpHandlers配置: