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

C# 给站点指定位置的某种格式的图片添加水印

2009-05-20 00:00 806 查看
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Drawing; 
namespace Chen 
{ 
/// <summary> 
/// HandlerImageOpener 的摘要说明 
/// </summary> 
public class HandlerImageOpener : IHttpHandler 
{ 
public HandlerImageOpener() 
{ 
// 
// TODO: 在此处添加构造函数逻辑 
// 
} 
private string _path = ""; 
/// <summary> 
/// 水印图片路径 
/// </summary> 
public string PngPath 
{ 
get 
{ 
if (_path == "") 
{ 
_path = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkedImagePath"]); 
} 
return _path; 
} 
} 
/// <summary> 
/// 为图片加水印并写入到Response.OutputStream 
/// </summary> 
/// <param name="hc">上下文对象</param> 
public void GetNewBitMap(HttpContext hc) 
{ 
// 加载原图片 
//System.Web.HttpContext.Current.Response.Write(System.Drawing.Image.FromFile(hc.Request.PhysicalPath)); 
//System.Web.HttpContext.Current.Response.End(); 
Bitmap oldBmp = new Bitmap(System.Drawing.Image.FromFile(hc.Request.PhysicalPath)); 
int newWidth = oldBmp.Width; 
int newHeight = oldBmp.Height; 
if (oldBmp != null) 
{ 
// 绑定画板 
Graphics grap = Graphics.FromImage(oldBmp); 
// 加载水印图片 
Bitmap bt = new Bitmap(PngPath); 
// 水印位置控制 
int pH = GetNewPoint(newHeight, bt.Height, true); 
int pW = GetNewPoint(newWidth, bt.Width, false); 
if (newHeight < pH * 8) 
pH = pH / 2; 
if (newWidth < pW) 
pW = pW / 2 / 2; 
int pX = newHeight - pH; 
int pY = newWidth - pW - 3; 
// 添加水印 
grap.DrawImage(bt, pY, pX, pW, pH); 
// 写入到输出流 
oldBmp.Save(hc.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
} 
} 
// 控制宽高 
private int GetNewPoint(int oldP, int newP, bool isW) 
{ 
int p = 4; 
if (isW) 
{ 
p = 16; 
} 
if (oldP < (newP * p)) 
{ 
newP /= 2; 
if (oldP < (newP * p)) 
{ 
GetNewPoint(oldP, newP, isW); 
} 
} 
return newP; 
} 
#region IHttpHandler 成员 
bool IHttpHandler.IsReusable 
{ 
get { return true; } 
} 
void IHttpHandler.ProcessRequest(HttpContext context) 
{ 
GetNewBitMap(context); 
} 
#endregion 
} 
} 
生成.dll文件后在web.config 中配置 
<!--水印图片路径--> 
<appSettings> 
<add key="WatermarkedImagePath" value="~/logo.gif"/> 
</appSettings> 
<!--引用处理函数 path为需要加水印图片的目录--> 
<httpHandlers> 
<add type="Chen.HandlerImageOpener, Chen" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" /> 
</httpHandlers>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: