ASP.NET 给图片动态添加文字水印
2011-10-10 13:05
701 查看
文件结构图:
Default.aspx 这里只是添加了几个图片
WaterMarkHandler.cs
最后在web.config文件中配置如下:
此处设置的只对images文件夹下的.jpg图片添加水印
在<configuration>配置节点下添加如下配置字节
最后结果如下:
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> <!--水印图片结束-->
最后结果如下:
相关文章推荐
- ASP.NET 给图片动态添加文字水印
- ASP.NET 上传图片添加文字、Logo水印
- asp.net动态添加图片水印
- asp .net 为图片添加文字水印(内包含有加图片水印的方法,但尚未完善暂不能使用)
- asp.net 生成缩略图、为图片添加文字水印、图片水印等功能
- ASP.NET 上传图片添加文字、Logo水印
- asp.net如何给每张图片动态添加水印方法(一)
- asp.net为图片添加文字水印
- asp.net实现图片添加文字及图片水印
- asp.net通过实现IHttpHandler接口方法给图片添加水印图片(动态添加,不破坏原图片,但是耗资源)
- asp .net 为图片添加文字水印(内包含有加图片水印的方法) .
- asp.net如何给每张图片动态添加水印方法(二)
- ASP.NET(C#)缩略图片,添加文字水印和图片水印
- asp.net 生成缩略图、为图片添加文字水印、图片水印等功能
- asp.net、C#动态添加图片水印
- asp.net 上传图片,生成缩略图,生成图片水印,文字水印
- asp.net图片添加水印
- ASP.NET(C#)上传图片加上文字或图片水印
- ASP.NET 自动生成缩略图、自动生成带文字水印和图片的水水印
- asp.net 添加文字水印