Asp.net给图片加水印

本文介绍了一种通过一般处理程序实现在图片上添加水印的方法,包括配置Web.Config以指定处理程序及具体实现代码。该方法能在用户请求图片时动态添加水印,既减轻服务器负担又保护原始图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般网站水印的实现:
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文件时进行权限验证


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值