使用一般处理程序(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的时候就可以输出图片了。

相关文章


java获得当前系统内存及硬盘使用情况的代码计算机等级考试
如何取得ResultSet的行数计算机等级考试
让Tomcat支持中文路径名和中文文件名计算机等级考试
使用一般处理程序(IHttpHandler)制作图片水印计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛