一、指定Handler方式

1、添加Handler一般处理程序

2、PicHandler.ashx源码如下:

需要的引用:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;
using System.Drawing;
using System.IO;

 public class PicHandler: IHttpHandler
{ //图片路径
string IMG = "~/ProductImgs/";
//默认图片路径
string DefaultImg = "~/ProductImgs/default.jpg";
public void ProcessRequest(HttpContext context)
{
//获取要添加图片的路径
string path = context.Request.MapPath(IMG + context.Request.QueryString["id"].ToString() + ".jpg");
Image image;
//判断图片是否存在
if (File.Exists(path))
{
//加载图片文件
image = Image.FromFile(path);
//定义画布
Graphics graphics = Graphics.FromImage(image);
//加水印
graphics.DrawString("马春海的编程博客", new Font("微软雅黑", 12), Brushes.Red, image.Width - 125, image.Height - 15);
//释放画布
graphics.Dispose(); }
else
{
//如果图片不存在的话则显示默认图片
image = Image.FromFile(DefaultImg);
}
//设置输出的图片格式
context.Response.ContentType = "image/jepg";
//将修改的图片存入输出流
image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//释放图片
image.Dispose();
//终止输出
context.Response.End();
} public bool IsReusable
{
get
{
return false;
}
}
}

3、修改图片路径

我们还要做的就是,将所有需要使用数字水印访问图片的路径修改为"PicHandler.ashx?id=数字就可以了,这时我们就可以看到封面图片的右下角添加上"马春海的编程博客"的标识,完成了数字水印的效果。接着我们打开ProductImgs文件夹查看封面图片的原图,发现原图没有做任何的修改。真是太神奇了!

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Pic.aspx.cs" Inherits="ASP.NET水印._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image ID="Image1" runat="server" ImageUrl="~/ProductImgs/1.jpg" />
        <asp:Image ID="Image2" runat="server" ImageUrl="~/ProductImgs/2.jpg" />
        <asp:Image ID="Image3" runat="server" ImageUrl="~/ProductImgs/3.jpg" />
        <asp:Image ID="Image4" runat="server" ImageUrl="~/ProductImgs/4.jpg" /><br />
        <asp:Image ID="Image5" runat="server" ImageUrl="~/PicHandler.ashx?id=1" />
        <asp:Image ID="Image6" runat="server" ImageUrl="~/PicHandler.ashx?id=2" />
        <asp:Image ID="Image7" runat="server" ImageUrl="~/PicHandler.ashx?id=3" />
        <asp:Image ID="Image8" runat="server" ImageUrl="~/PicHandler.ashx?id=4" />
    </div>
    </form>
</body>
</html>

运行到浏览器的时候:

二、全局Handler方式

1、修改web.config,将所有对.jpg内容的访问转到Httphandler处理程序。

<httpHandlers>
<add verb="*" path="ProductImgs/*.jpg" type="PicCoverHandler"/>
</httpHandlers>

2、PicCoverHandler源码

 public class PicCoverHandler : IHttpHandler
{
//默认图片
private string defaultimg = "~/productimgs/default.jpg"; public void ProcessRequest(HttpContext context)
{
//实例化图片
Image Cover;
//判断图片物理路径是否存在
if (File.Exists(context.Request.PhysicalPath))
{
//加载图片
Cover = Image.FromFile(context.Request.PhysicalPath);
//定义字体
Font font = new Font("微软雅黑", 20);
//定义画布
Graphics g = Graphics.FromImage(Cover);
//合成水印图片
g.DrawString("xiecan.cc", font, Brushes.Blue, Cover.Width - 90, Cover.Height - 30);
//释放画布
g.Dispose();
}
else
{
Cover = Image.FromFile(context.Request.MapPath(defaultimg));
}
//定义输出类型
context.Response.ContentType = "image/jpeg";
//保存图片到输出流
Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//释放图片
Cover.Dispose();
//终止输出
context.Response.End(); } public bool IsReusable
{
get
{
return false;
}
}
}

3、最后一步,运行到浏览器查看就可以啦。

源码下载: 点击下载  密码: jmv4

ASP.NET HttpHandler加水印的更多相关文章

  1. ASP组件AspJpeg(加水印)生成缩略图等使用方法

    ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出 ...

  2. Web 上传图片加水印

    上传图片加水印 需要使用控件FileUpload 上传按钮Image控件展示上传的图片,页面中拖入三个控件 <form id="form1" runat="serv ...

  3. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  4. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  5. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  6. 【转】WPF TextBox和PasswordBox加水印

    Textbox加水印 Textbox加水印,需要一个VisualBrush和触发器验证Text是否为空,在空的时候设置背景的Brush就可以实现水印效果. <TextBox Name=" ...

  7. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  8. 使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等

    添加水印,并且增加权限 @Test public void addWaterMark() throws Exception{ String srcFile="D:\\work\\pdf\\w ...

  9. 用node.js给图片加水印

    一.准备工作: 首先,确保你本地已经安装好了node环境.然后,我们进行图像编辑操作需要用到一个Node.js的库:images.这个库的地址是:https://github.com/zhangyua ...

随机推荐

  1. 【Android】5.0 第一个工程学习——应用名称和图标修改、增加Buton控件、Toast信息提示

    1.0 搞了很多天,eclipse只能开发Android6.0以前的版本,可能是因为谷歌不再针对eclipse更新了,在虚拟机Android6.0以上版本都无法构建,所以转到Android Studi ...

  2. 常用css属性记录

    CSS常用属性: 字体属性:(font)大小 font-size: x-large;(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD样式 font-style: ...

  3. Eclipse中搭建Android开发环境

    一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 下载地址:Eclipse:http://www.eclipse.org/downloads/ ...

  4. AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)

    手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事.也有自己的.也有来自网络的,来源途径太多,也没法详细注明,请见谅! ...

  5. ubuntu14.04安装rabbitmq

      ubuntu14.04安装rabbitmq及配置 1.修改/etc/apt/sources.list文件 命令:vi /etc/apt/sources.list 在最后一行加上:deb http: ...

  6. 用python管理Cisco路由器

    目前DevOps是整个运维发展的方向,Network的运维也一样.使用程序控制底层的路由器是最基本的要求之一. 本文简单解释如何用Python控制路由器,对网络设备进行配置. Python和网络设备连 ...

  7. May 11th 2017 Week 19th Thursday

    If you fell down yesterday, stand up today. 昨天跌倒了,今天仍然要站起来. From Herbert George Wells. If you fell d ...

  8. 我是一只IT小小鸟读后感 Part 1

    我是一只IT小小鸟读后感 Part 1 梦断计院 作为一个工科生,真的和作者想到一块去了.在科大这个环境下,GPA成了衡量一个学生优秀与否的唯一因素,而真正对于编程和技术性的东西有兴趣的,往往被埋没在 ...

  9. 小故事学设计模式之Command : (一) 在永和豆浆店

    IT的事就是过场多,过场多了就容易忘,所以我们不妨看一个记一个,这也是一个办法,顺便跟同行们学习交流一下)前几天出去拍照,饿到腿软, 回城附近有一家永和豆浆店, 我们决定去那边解决午餐.豆浆店里面还不 ...

  10. python manage.py startapp app 时候报错No module named _sqlite3

    python manage.py startapp app 报错如下: File "manage.py", line 10, in <module>    execut ...