做网站的时候经常需要将图片加上网站名称的水印。这样做可以使别人转载图片的时候出现图片出处 ,利于网站宣传。但是如果利用ps来一个一个加水印工作量非常浩大,而且修改了之后就没法还原。这 篇教程教大家利用一般处理程序(Handler)制作图片水印,这种水印的优点是一经修改全站适用,而且 不改变原来的图片。
制作水印分为两种方法,一种是利用局部Handler,另一种是利用全局Handler。前者可以灵活的选择 文件夹内的图片是否都加水印,但印。为了节省篇幅Handler的教程就不写了。是每次做链接的时候都要 加入Handler地址,不利于整体修改。而后者是指定文件夹里的图片都加水印。
一、局部Handler:
1.在aspx页面中写入
<asp:Image ID="Image1" runat="server" ImageUrl="~/MyBookHandler.ashx?title=9221944" />
这句话加入一个Image服务器控件,图片地址指向~/MyBookHandler.ashx?title=9221944。也就是根 目录下的MyBookHandler.ashx。(其中title为图片名)
2.添加一般处理程序MyBookHandler.ashx。
MyBookHandler内容
1 <%@ WebHandler Language="C#" Class="MyBookHandler" %> 2 3 using System; 4 using System.Web; 5 using System.Drawing; 6 using System.Drawing.Imaging; 7 using System.IO; 8 9 public class MyBookHandler : IHttpHandler 10 { 11 12 private string imagepath = "~/image/"; //图片所在的文件夹 13 private const string waterimage = "~/image/Watermark.jpg"; //水印图片 14 private const string defaultimage = "~/image/default.jpg"; //没有找到图片时显示的图片 15 private const float alpha = 0.5F; //透明度 16 17 public void ProcessRequest(HttpContext context) 18 { 19 imagepath += context.Request.QueryString["imagename"] + ".jpg";//获得图片名称 20 Image image; //图片类 21 //如果文件夹内存在图片context.Request.MapPath获得物理地址 22 if (File.Exists(context.Request.MapPath(imagepath))) 23 { 24 image = Image.FromFile(context.Request.MapPath(imagepath));//将图片内容放到image对象 25 Graphics g = Graphics.FromImage(image); //获得Graphics 对象 26 Image watermark = Image.FromFile(context.Request.MapPath(waterimage));//将水印图片放入watermark 对象 27 //关于透明度(使用颜色矩阵) 28 float[][] nArray ={ new float[] {1, 0, 0, 0, 0}, 29 new float[] {0, 1, 0, 0, 0}, 30 new float[] {0, 0, 1, 0, 0}, 31 new float[] {0, 0, 0,alpha , 0}, 32 new float[] {0, 0, 0, 0, 1}}; 33 ColorMatrix colormatrix = new ColorMatrix(nArray); 34 ImageAttributes attributes = new ImageAttributes(); 35 attributes.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); 36 g.DrawImage(watermark, new Rectangle(image.Width - watermark.Width, image.Height - watermark.Height, 37 watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, attributes);//在图片指定坐标处放入一个矩形图片内容为水印图片 38 g.Dispose(); 39 watermark.Dispose(); 40 } 41 else 42 { 43 imag |