C# 圖片加浮水印(1)

來源:互聯網
上載者:User

圖片加浮水印的方法有很多,這裡先對臨時加浮水印的方法進行下介紹

臨時加浮水印:

就是在響應使用者請求時對響應中的圖片在內在中加浮水印,然後寫入輸出資料流,傳到用戶端。

這樣就能實現在不改變原圖的情況下,呈現給客戶浮水印圖片

 

首先我們需要定義一個實現IHttpHandler 介面的類:

 using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;</p><p>using System.Drawing;</p><p>/// <summary><br />/// HandlerImageOpener 的摘要說明<br />/// </summary><br />public class HandlerImageOpener : IHttpHandler<br />{<br /> public HandlerImageOpener()<br /> {<br /> //<br /> // TODO: 在此處添加建構函式邏輯<br /> //<br /> }</p><p> private string _path = "";<br /> /// <summary><br /> /// 浮水印圖片路徑<br /> /// </summary><br /> public string PngPath<br /> {<br /> get<br /> {<br /> if (_path == "")<br /> {<br /> _path = System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings["WatermarkedImagePath"]);<br /> }<br /> return _path;<br /> }<br /> }</p><p> /// <summary><br /> /// 為圖片加浮水印並寫入到Response.OutputStream<br /> /// </summary><br /> /// <param name="hc">內容物件</param><br /> public void GetNewBitMap(HttpContext hc)<br /> {<br /> // 載入原圖片<br /> Bitmap oldBmp = new Bitmap(System.Drawing.Image.FromFile(hc.Request.PhysicalPath)); </p><p> int newWidth = oldBmp.Width;<br /> int newHeight = oldBmp.Height;</p><p> if (oldBmp != null)<br /> {<br /> // 綁定畫板<br /> Graphics grap = Graphics.FromImage(oldBmp); </p><p> // 載入浮水印圖片<br /> Bitmap bt = new Bitmap(PngPath); </p><p> // 浮水印位置控制<br /> int pH = GetNewPoint(newHeight, bt.Height, true);<br /> int pW = GetNewPoint(newWidth, bt.Width, false);</p><p> if (newHeight < pH * 8)<br /> pH = pH / 2;<br /> if (newWidth < pW)<br /> pW = pW / 2 / 2;</p><p> int pX = newHeight - pH;<br /> int pY = newWidth - pW - 3;</p><p> // 添加浮水印<br /> grap.DrawImage(bt, pY, pX, pW, pH);</p><p> // 寫入到輸出資料流<br /> oldBmp.Save(hc.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);<br /> }<br /> }</p><p> // 控制寬高<br /> private int GetNewPoint(int oldP, int newP, bool isW)<br /> {<br /> int p = 4;<br /> if (isW)<br /> {<br /> p = 16;<br /> }<br /> if (oldP < (newP * p))<br /> {<br /> newP /= 2;<br /> if (oldP < (newP * p))<br /> {<br /> GetNewPoint(oldP, newP, isW);<br /> }<br /> }<br /> return newP;<br /> }</p><p> #region IHttpHandler 成員</p><p> bool IHttpHandler.IsReusable<br /> {<br /> get { return true; }<br /> }</p><p> void IHttpHandler.ProcessRequest(HttpContext context)<br /> {<br /> GetNewBitMap(context);<br /> }</p><p> #endregion<br />}<br />

 

然後在設定檔中引用這個處理類/並配置浮水印圖片位置:

<!--浮水印圖片路徑--><br /><appSettings><br /> <add key="WatermarkedImagePath" value="~/logopng.png"/><br /></appSettings></p><p><!--引用處理函數 path為需要加浮水印圖片的目錄--><br /><httpHandlers><br /><add type="HandlerImageOpener" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" /><br /></httpHandlers>

 

完成。

這樣在頁面被訪問的時候,path目錄下的圖片會被自動加上浮水印

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.