您的位置:首页 > 编程语言 > ASP

Asp.net给图片加水印

2013-09-09 09:50 190 查看
一般网站水印的实现:

1)上传时就对图片加水印:

a) 每次用户访问时,直接给用户图片就行了.减小服务器端的压力.

b) 缺点:破坏了原有图片.如果网站换logo或改名

2)使用一般处理程序:

a) 每次用户请求都要进行水印的添加,增加了服务器端压力

b) 原图片被保存下来了.

使用一般处理程序的方法

在Web.Config配置文件中设置

<httpHandlers>

<add verb="*" path="/images/bookcovers/*.jpg" type="命名空间.类名" />

</httpHandlers>

verb表示所有的请求方式(get和post)

path代表请求网站那个目录下的文件要进行过滤

type表示要执行的一般处理程序的类名(命名空间.类名)

=================================================================================

一般处理程序代码参考

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Drawing;

using System.IO;

namespace BookShop.Web

{

public class gwatermark : IHttpHandler

{

private const string WATERMARK_URL = "~/Images/watermark.jpg"; //水印图片

private const string DEFAULTIMAGE_URL = "~/Images/default.jpg";

#region IHttpHandler 成员

public bool IsReusable

{

get { return false; }

}

public void ProcessRequest(HttpContext context)

{

System.Drawing.Image Cover;

//判断请求的物理路径中,是否存在文件

if (File.Exists(context.Request.PhysicalPath))

{

//加载文件

Cover = Image.FromFile(context.Request.PhysicalPath);

//加载水印图片

Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));

//实例化画布

Graphics g = Graphics.FromImage(Cover);

//在image上绘制水印

g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel);

//释放画布

g.Dispose();

//释放水印图片

watermark.Dispose();

}

else

{

//加载默认图片

Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));

}

//设置输出格式

context.Response.ContentType = "image/jpeg";

//将图片存入输出流

Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

Cover.Dispose();

context.Response.End();

}

#endregion

}


}

============================================================================================================

要建立一个全局的一般处理程序步骤:

1)建一个类文件,继承自IHttpHandler接口并实现其方法,

2)在ProcessRequest方法中对用户请求的文件进行处理,如何知道用户请求的是哪一个文件呢? context.Request.PhysicalPath;

3)写好上述文件后,修改web.config 在 <httpHandlers>节点中添加下面一句话:

<addverb="*"path="/images/bookcovers/*.jpg"
type="BookShop.Web.Common.wmCode" />

Verb表示请求方式 GET/POST
可以用*表示所有方式

Path 请求时,要转到全局一般处理程序的文件名
可以使用通配符

Type 把请求转给哪一个一般处理程序去处理,这里写类名.如果是WebSite,那么就写类名就行了.如果是Web应用程序,就写命名空间.类名

实现上面3步,在测试环境下就可以了.如果要是放在iis上,还是不可以.

在网站上点右键->属性->主目录->配置



添加一个映射:





1)水印

2)防盗链

3)下载rar/txt文件时进行权限验证
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: