您的位置:首页 > 编程语言 > ASP

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

2011-10-10 13:05 701 查看
文件结构图:



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


最后结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: