ASP.NET 给图片动态添加文字水印

来源:互联网 发布:中华网络一条龙可靠么 编辑:程序博客网 时间:2024/05/16 10:46

文件结构图:


Default.aspx  这里只是添加了几个图片

<div>        <img src="images/3.jpg" /><br /><br />                下面这张图片不存在显示程序指定的默认图片<br />        <img src="images/暂无图片.jpg" />    </div>

WaterMarkHandler.cs  

using System;using System.Web;using System.Drawing;using System.Drawing.Imaging;using System.IO;/// <summary>///imageSY 的摘要说明/// </summary>public class WaterMarkHandler : IHttpHandler{    public WaterMarkHandler(){////TODO: 在此处添加构造函数逻辑//    }    #region IHttpHandler 成员    /// <summary>    /// 指示其它请求是否可以使用这个实例,如果是true,则放入池中接受其它请求以提高请求    /// </summary>    public bool IsReusable    {        get { return true; }    }    /// <summary>    /// 处理请求    /// </summary>    /// <param name="context">当前HTTP请求的上下文</param>    public void ProcessRequest(HttpContext context)    {        //获取请求的物理图片路径        string imagePath = context.Request.PhysicalPath;        //========================================================================================        //用此方法可获取当前URL,可进一步完善此方法,在本站没有水印,如果是外部引用则添加水印,需添加一个判断即可        //HttpRequest request = context.Request;        //HttpResponse response = context.Response;        //Uri referrerUri = request.UrlReferrer;//获取下载之前访问的那个页面的uri        //Uri currentUri = request.Url;//获取当前URL地址信息        //-----------------------------------------------------------------------------------------        //===============================================================================================        //生成添加水印的记录        //string logFileName = context.Server.MapPath("~/log.txt");        //StreamWriter writer = null;        //if (!File.Exists(logFileName))        //{        //    writer = File.CreateText(logFileName);        //}        //else        //{        //    writer = new StreamWriter(logFileName, true, System.Text.Encoding.UTF8);        //}        //writer.WriteLine("请求文件名:{0},时间:{1}", imagePath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));        //writer.Close();        //-----------------------------------------------------------------------------------------------------        Image image = null;        if (File.Exists(imagePath))        {            //定义水印文字            string text = "图片水印文字";            //定义水印文字字体大小            int fontSize = 24;            //水印文字字体            Font font = new Font("宋体", fontSize);            //根据图片物理地址加载图片            image = Image.FromFile(imagePath);            Graphics g = Graphics.FromImage(image);            //获取要绘制水印文字所需要的显示区域大小            SizeF size = g.MeasureString(text, font);            if (size.Width > image.Width || size.Height > image.Height)            {                //如果要显示的图片的尺寸都不足以显示按照指定字体来添加水印                //可以减小字体大小或者不添加水印(太小了没办法添加嘛)            }            else//添加水印文字            {                Brush brush = Brushes.Red;                //在图片上添加水印,绘制水印文字在图片的右下角                g.DrawString(text, font, brush, image.Width - size.Width, image.Height - size.Height);                g.Dispose();            }        }        else//如果不存在,指定一个默认图片进行显示        {            imagePath = context.Server.MapPath("~/images/nonepc.gif");            image = Image.FromFile(imagePath);        }        image.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将添加水印的图片输入到当前流中    }    #endregion}

最后在web.config文件中配置如下:

此处设置的只对images文件夹下的.jpg图片添加水印

在<configuration>配置节点下添加如下配置字节

<!--水印图片-->        <!--需要控制的文件夹--><location path="images"><system.web><httpHandlers><!--对jpg文件添加水印,path="*.*"表示对所有格式添加水印,type="WaterMarkHandler"指定需要操作的类--><!--<add verb="*" path="*.jpg" type="HttpHandlers.WaterMarkHandler,HttpHandlers"/>--><add verb="*" path="*.jpg" type="WaterMarkHandler"/></httpHandlers></system.web></location><!--水印图片结束-->

最后结果如下: