架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 13840|回复: 0

[ASP.NET] 使用一般处理程序(IHttpHandler)制作图片全局水印

[复制链接]
发表于 2015-9-10 23:37:26 | 显示全部楼层 |阅读模式
QQ截图20150910233228.jpg

水印是为了防止别盗用我们的图片.

两种方式实现水印效果

1)可以在用户上传时添加水印.

a)   好处:与2种方法相比,用户每次读取此图片时,服务器直接发送给客户就行了.

b)   缺点:破坏了原始图片.

2)通过全局的一般处理程序,当用户请求这张图片时,加水印.

a)   好处:原始图片没有被破坏

b)   缺点:用户每次请求时都需要对请求的图片进行加水印处理,浪费的服务器的资源.
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Drawing;
  6. using System.IO;

  7. namespace Watermark
  8. {

  9.     /// <summary>
  10.     /// waterH 的摘要说明
  11.     /// </summary>
  12.     public class waterH : IHttpHandler
  13.     {
  14.         public waterH()
  15.         { }
  16.         private const string WATERMARK_URL = "~/Test/watermark.png";
  17.         private const string DEFAULTIMAGE_URL = "~/Test/watermark.png";
  18.         public void ProcessRequest(HttpContext context)
  19.         {
  20.             System.Drawing.Image Cover;
  21.             if (File.Exists(context.Request.PhysicalPath))
  22.             {
  23.                 Cover = Image.FromFile(context.Request.PhysicalPath);
  24.                 Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));
  25.                 Graphics g = Graphics.FromImage(Cover);
  26.                 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);
  27.                 g.Dispose();
  28.                 watermark.Dispose();
  29.             }
  30.             else
  31.             {
  32.                 Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
  33.             }
  34.             context.Response.ContentType = "images/jpeg";
  35.             Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  36.             Cover.Dispose();
  37.             context.Response.End();
  38.         }

  39.         public bool IsReusable
  40.         {
  41.             get
  42.             {
  43.                 return false;
  44.             }
  45.         }
  46.     }
  47. }
复制代码
waterH.ashx的文件代码如上:

然后需要在web.config上配置如下节点:

在system.web节点下
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

一开始 ,我配置的节点是:
    <httpHandlers>
      <add verb="*" path="Images/*.jpg" type="waterH"/>
    </httpHandlers>

会报错,
配置错误

说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误消息: 未能加载类型“waterH”。

源错误:


行 15:   <system.web>
行 16:     <httpHandlers>
行 17:       <add verb="*" path="Images/*.jpg" type="waterH"/>
行 18:     </httpHandlers>
行 19:     <compilation debug="true" targetFramework="4.0" />


QQ截图20150910233338.jpg

最后,在waterH前面加上项目的名称就好了!
最后,附上源代码一份: Watermark.rar (234.64 KB, 下载次数: 0, 售价: 2 粒MB)




上一篇:360酷派周鸿祎和蒋超互撕还是炒作?
下一篇:网站js挂马思路,外调j/c
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-9-17 05:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表