程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用一般處理程序(IHttpHandler)制作圖片水印

使用一般處理程序(IHttpHandler)制作圖片水印

編輯:關於ASP.NET

做網站的時候經常需要將圖片加上網站名稱的水印。這樣做可以使別人轉載圖片的時候出現圖片出處 ,利於網站宣傳。但是如果利用ps來一個一個加水印工作量非常浩大,而且修改了之後就沒法還原。這 篇教程教大家利用一般處理程序(Handler)制作圖片水印,這種水印的優點是一經修改全站適用,而且 不改變原來的圖片。

制作水印分為兩種方法,一種是利用局部Handler,另一種是利用全局Handler。前者可以靈活的選擇 文件夾內的圖片是否都加水印,但印。為了節省篇幅Handler的教程就不寫了。是每次做鏈接的時候都要 加入Handler地址,不利於整體修改。而後者是指定文件夾裡的圖片都加水印。

一、局部Handler:

1.在aspx頁面中寫入

<asp:Image ID="Image1" runat="server" ImageUrl="~/MyBookHandler.ashx?title=9221944" />

這句話加入一個Image服務器控件,圖片地址指向~/MyBookHandler.ashx?title=9221944。也就是根 目錄下的MyBookHandler.ashx。(其中title為圖片名)

2.添加一般處理程序MyBookHandler.ashx。

MyBookHandler內容

1  <%@ WebHandler Language="C#" Class="MyBookHandler" %>
2
3 using System;
4 using System.Web;
5 using System.Drawing;
6 using System.Drawing.Imaging;
7 using System.IO;
8
9 public class MyBookHandler : IHttpHandler
10 {
11
12 private string imagepath = "~/image/"; //圖片所在的文件夾
13 private const string waterimage = "~/image/Watermark.jpg"; //水印圖片
14 private const string defaultimage = "~/image/default.jpg"; //沒有找到圖片時顯示的圖片
15 private const float alpha = 0.5F; //透明度
16
17 public void ProcessRequest(HttpContext context)
18 {
19 imagepath += context.Request.QueryString["imagename"] + ".jpg";//獲得圖片名稱
20 Image image; //圖片類
21 //如果文件夾內存在圖片context.Request.MapPath獲得物理地址
22 if (File.Exists(context.Request.MapPath(imagepath)))
23 {
24 image = Image.FromFile(context.Request.MapPath(imagepath));//將圖片內容放到image對象
25 Graphics g = Graphics.FromImage(image); //獲得Graphics 對象
26 Image watermark = Image.FromFile(context.Request.MapPath(waterimage));//將水印圖片放入watermark 對象
27 //關於透明度(使用顏色矩陣)
28 float[][] nArray ={ new float[] {1, 0, 0, 0, 0},
29 new float[] {0, 1, 0, 0, 0},
30 new float[] {0, 0, 1, 0, 0},
31 new float[] {0, 0, 0,alpha , 0},
32 new float[] {0, 0, 0, 0, 1}};
33 ColorMatrix colormatrix = new ColorMatrix(nArray);
34 ImageAttributes attributes = new ImageAttributes();
35 attributes.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
36 g.DrawImage(watermark, new Rectangle(image.Width - watermark.Width, image.Height - watermark.Height,
37 watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, attributes);//在圖片指定坐標處放入一個矩形圖片內容為水印圖片
38 g.Dispose();
39 watermark.Dispose();
40 }
41 else
42 {
43 image = Image.FromFile(context.Request.MapPath(defaultimage));//如果不存在圖片就輸出defaultimage。
44 }
45 context.Response.ContentType = "image/jpeg";//輸出圖片的類型
46 image.Save(context.Response.OutputStream, ImageFormat.Jpeg);//將圖片存入輸出流
47 image.Dispose();
48 context.Response.End();
49 }
50
51 public bool IsReusable
52 {
53 get
54 {
55 return false;
56 }
57 }
58 }

這樣當Image控件訪問Handler的時候就可以輸出圖片了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved