给图片动态添加水印功能

    技术2022-05-20  44

    动态添加水印功能同样需要增加自定义的实现IHttpHandle的类(WaterMarkHandlers),并在webconfig的根节点下增加一个<locaion>节点。

    <location path="images">    <system.web>      <httpHandlers>        <!--对images文件夹下的所有jpg文件添加水印-->        <add verb="*" path="*.jpg" type="WaterMarkHandler"/>        <add verb="*" path="*.bmp" type="WaterMarkHandler"/>      </httpHandlers>    </system.web>  </location>

     

    using System;using System.Web;using System.Drawing;using System.Drawing.Imaging;using System.IO;

    /// <summary>/// 动态给图片添加水印的类/// </summary>public class WaterMarkHandler : IHttpHandler{    public WaterMarkHandler()    {

        }

        #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;        Image image = null;        if (File.Exists(imagePath))        {            //定义水印文字            string text = "图片来自励志工作室";            //定义水印文字字体大小            int fontSize = 3;            //水印文字字体            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/nopic.jpg");            image = Image.FromFile(imagePath);        }        image.Save(context.Response.OutputStream, ImageFormat.Jpeg);//将添加水印的图片输入到当前流中    }

        #endregion}


    最新回复(0)