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

文件结构图:

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>
	<!--水印图片结束-->


最后结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值