使用一般处理程序(IHttpHandler)制作图片水印计算机等级考试
文章作者 100test 发表时间 2009:06:24 19:54:10
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
做网站的时候经常需要将图片加上网站名称的水印。这样做可以使别人转载图片的时候出现图片出处,利于网站宣传。但是如果利用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 private string coverimage = "~/image/". //图片所在的文件夹
12 private const string waterimage = "~/image/Watermark.jpg". //水印图片
13 private const string defaultimage = "~/image/default.jpg". //没有找到图片时显示的图片
14
15 public void ProcessRequest(HttpContext context)
16 {
17 coverimage = context.Request.QueryString["title"] ".jpg".//获得图片名称
18 Image Cover. //图片类
19 //如果文件夹内存在图片context.Request.MapPath获得物理地址
20 if (File.Exists(context.Request.MapPath(coverimage)))
21 {
22 Cover = Image.FromFile(context.Request.MapPath(coverimage)).//将图片内容放到Cover对象
23 Graphics g = Graphics.FromImage(Cover). //获得Graphics 对象
24 Image watermark = Image.FromFile(context.Request.MapPath(waterimage)).//将水印图片放入watermark 对象
25 g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height,
26
27 watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel).//在图片底部放入一
28
29 个矩形图片内容为水印图片
30 g.Dispose().
31 watermark.Dispose().
32 }
33 else
34 {
35 Cover = Image.FromFile(context.Request.MapPath(defaultimage)).//如果不存在图片就输出defaultimage。
36 }
37 context.Response.ContentType = "image/jpeg".//输出图片的类型
38 Cover.Save(context.Response.OutputStream,ImageFormat.Jpeg).//将图片存入输出流
39 Cover.Dispose().
40 context.Response.End().
41 }
42
43 public bool IsReusable
44 {
45 get
46 {
47 return false.
48 }
49 }
50 }
这样当Image控件访问Handler的时候就可以输出图片了。