HttpHandler給本站加圖片水印

weixin_30639719發表於2020-04-05

 

1.在專案中新增一個    “ 一般處理程式”   

 

 

 

 

2.在web.config配置檔案的<system.web>標記下的<httpHandlers><httpHandlers/>內添中如下標記

       <add  verb="*"  path="image/map/*.jpg"  type="Handler"  />

 

                       *所有請求                 請求Paht路徑下.jpg圖片時                    用Handler處理

3.新增App_Code資料夾,在其內新增一個類,將 “一般處理程式”  中除頭標籤外的所有程式碼複製到該類中

           (因為程式只能識別在App_Code下的類檔案,在"一般處理程式中“不能識別,所以要將程式碼轉移:特別注意!)

 

using System;
using System.Web;
using System.Drawing;

 

public class Handler : IHttpHandler
{

 

   public void ProcessRequest(HttpContext context)
    {
       context.Response.ContentType = "text/plain";
       context.Response.Write("Hello World");
    }

 

   public bool IsReusable
    {
      get
       {
          return false;
       }
    }

 

 }

4.改造 上面類中的方法,為其新增水印效果或用5  中的程式碼、

 

/// <summary>
/// 對映檔案字尾名方式的數字水印
/// </summary>
public class CoverHandler : IHttpHandler
{
   private const string WATERMARK_URL = "~/images/hr.gif"; //水印圖片
   private const string DEFAULTIMAGE_URL = "~/images/nophoto.jpg"; //預設圖片
   public CoverHandler()
    {
    }
   public void ProcessRequest(HttpContext context)

    {
     System.Drawing.Image Cover;
     //判斷請求的物理路徑中,是否存在檔案
     if (File.Exists(context.Request.PhysicalPath))
       { 
          //載入檔案
          Cover = Image.FromFile(context.Request.PhysicalPath);
          //載入水印圖片
          Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));
          //例項化畫布
          Graphics g = Graphics.FromImage(Cover);
          //在image上繪製水印
          g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel);
         //釋放畫布
         g.Dispose();
         //釋放水印圖片
         watermark.Dispose();
       }
     else
      {
        //載入預設圖片
        Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
      }
     //設定輸出格式
     context.Response.ContentType = "image/jpeg";
     //將圖片存入輸出流
     Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
     Cover.Dispose();
     context.Response.End();
    }

   public bool IsReusable
   {
     get
      {
        return false;
       }
   }
}

 5.也可作如下程式碼處理,效果一樣。

 public void ProcessRequest(HttpContext context)
    {

//在這裡處理所有的*.jpg格式圖片請求

 

//獲取要請求的資源
string path = context.Request.PhysicalPath;
//載入logo
string logo = context.Server.MapPath("~/images/ibeifeng.png");
//利用要請求的資源建立繪圖場景
Image image = Image.FromFile(path);
Graphics g = Graphics.FromImage(image);
//將logo噴在場景的右下角
Image logoImage = Image.FromFile(logo);

float x = (float)(image.Width-60);
float y= (float)(image.Height-35);
g.DrawImage(logoImage,new RectangleF(x,y,60f,35f));
//將處理後的場景內容以圖片的方式向客戶端做響應
image.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
image.Dispose();
logoImage.Dispose();

    }

 

 

 

 

 

轉載於:https://www.cnblogs.com/yingger/archive/2012/04/24/2468350.html

相關文章