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文件时进行权限验证
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文件时进行权限验证
相关文章推荐
- ASP.NET 图片加水印防盗链实现代码
- asp.net上传图片并作处理水印与缩略图的实例代码
- asp.net中上传图片并生成小图片,自动添加水印的代码
- Asp.net(C#)给图片加上水印效果
- Asp.net上传图片同时生成缩略图和水印图
- asp .net 为图片添加图片水印
- asp.net 水印图片
- C# asp.net上传图片加水印文字(个人心得)
- ASP.NET网站开发-图片数字水印
- ASP.NET MVC编程入门--图片水印与缩略图(一)
- 使用ASP.NET Image Generation生成图片缩略图及水印
- asp.net中上传图片并生成小图片,自动添加水印的代码 .
- ASP.NET C# 图片加文字、图片水印二版本
- asp.net上传图片并打水印
- ASP.NET 缩略图 文字水印 图片水印
- ASP.NET水印文字超出图片边界,显示在图片外面
- asp.net上传图片+自动生成缩略图+图片水印功能
- ASP.NET给图片加上水印
- ASP.NET 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字水印和图片的水印图