|
可以给站点指定位置的某种格式的图片添加水印的c#实现代码。
复制代码 代码如下: 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>
|
|