本帖最后由 咖喱猫 于 2013-8-12 22:58 编辑
在课堂上学到的给指定目录下的所有图片附加指定水印;
需要创建一个类并且继承:IHttpHandler
代码如下:- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
- /// <summary>
- ///CoverHandler 的摘要说明
- /// </summary>
- public class CoverHandler:IHttpHandler
- {
- //所有需要添加水印图片的路径
- public const string oldImageUrl = "~/admin/BookConvers/";
- //水印图片
- public const string waterUrl = "~/admin/images/WaterMark.jpg";
- //默认图片
- public const string DefaultImage = "~/admin/images/Default.jpg";
- public CoverHandler()
- {
- //
- //TODO: 在此处添加构造函数逻辑
- //
- }
- public void ProcessRequest(HttpContext context)
- {
- //string path = context.Request.MapPath(oldImageUrl+context.Request.Params["ISBN"]+".jpg");
- System.Drawing.Image Cover;
- //判断请求的物理路径中,是否存在文件
- if (File.Exists(context.Request.PhysicalPath))
- {
- //加载文件
- //Cover= Image.FromFile(context.Request.PhysicalPath);
- Cover = Image.FromFile(context.Request.PhysicalPath);
- //加载水印图片
- Image watermark = Image.FromFile(context.Request.MapPath(waterUrl));
- //实例化画布
- Graphics g = Graphics.FromImage(Cover);
- //在Cover上绘制水印
- g.DrawImage(watermark, new Point(Cover.Width - watermark.Width, Cover.Height - watermark.Height));
- //释放画布
- g.Dispose();
- //释放水印图片
- watermark.Dispose();
- //保存输出流
- Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
- //结束输出
- Cover.Dispose();
- context.Response.End();
- }
- else
- {
- Cover = Image.FromFile(context.Request.MapPath(DefaultImage));
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
复制代码 配置文件:- <add verb="*" path="admin/BookCovers/*.jpg" type="CoverHandler"/>
- </httpHandlers>
复制代码 由于图片的大小会影响水印在图片中的位置,尽量使用大小相同的图片。
水印效果图:
|