Asp.net全站图片加水印:实现IHttpHandler接口

只要实现IHttpHandler接口就可以截获图片请求,实现自动加水印的功能。

首先,创建一个类,实现IHttpHandler接口,在ProcessRuquest方法下实现具体图片加水印逻辑,代码如下:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
 
namespace MySite
{
    public class ImageHandler : IHttpHandler
    {
        #region IHttpHandler Members
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            string path = context.Request.PhysicalPath;//获取请求的图片在服务器的上的物理路径
            if (File.Exists(path))
            {
                Image image = Image.FromFile(path);
                if (image.Width > 400 & image.Height > 400)//对于长宽都大于400px的图片才加水印
                {
                    Graphics g = Graphics.FromImage(image);
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.DrawString("水印文字", new Font("宋体", 22, FontStyle.Bold), new SolidBrush(Color.Aquamarine), 0, 0);
                    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
                    g.Dispose();
                }
                image.Dispose();
            }
            else
            {
                context.Response.StatusCode = 404;
            }
            context.Response.Flush();
            context.Response.End();
        }
 
        public bool IsReusable
        {
            get { return false; }
        }
 
        #endregion
}

 

 

这里只是对请求的jpg文件加上水印,实际上本地的图片还是原图,若要对gifpng等图片加上水印,可在逻辑代码添加。  

配置Web.Config文件,使jpg文件通过自己的handler处理,这样请求jpg图片就自动加上水印。在System.Web节点添加如下配置即可。

 
<httpHandlers>   
      <add    path="*.jpg" type="MySite.ImageHandler" verb="*"/>
    </httpHandlers>

这样,对应jpg文件的请求都在ImageHandler类处理,具体需要其他功能比如缩略图等只要加上代码都可以处理。

转载于:https://www.cnblogs.com/yuanxingke/archive/2012/12/14/2817505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值