一、指定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

转载于:https://www.cnblogs.com/xiaoheima/p/9536309.html

ASP.NET HttpHandler加水印相关推荐

  1. ASP组件AspJpeg(加水印)

    <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件 Jpeg.O ...

  2. ASP.NET给图片加水印

    给图片加水印,是多数网站做的简洁明了的版权说明 做一个模拟版的 目前学了两种给图片加水印的方案,做个学习记录 通过一般处理程序(.ashx) 将文件名称传到一般处理程序中 前端页面,在此指定图片路径 ...

  3. ASP.NET给图片加水印——上传文件

    在上一篇文章介绍了指定图片文件,给指定的文件添加水印 在本文中将加水印应用于项目中,在用户上传图片文件时,为图片加相应的水印 仍然使用一般处理程序(.ashx) 用户都是通过上传控件,将图片文件添加进 ...

  4. 图片显示时加水印(不改变原图片)

    [转]:http://adyhpq.blog.163.com/blog/ 刚刚写了一个在显示图片是加水印的程序(不改变原图片)的程序,写出来和大家分享一下,也许有的人已经早就会了 原理很简单,就是拦截 ...

  5. bmp图片加水印C语言,[求助]C语言 bmp文件加上水印

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给一张图片加水印后存起来然后显示出来 有部分源码 求高手帮忙完成~! #include #include /* structure defiens bit ...

  6. h5 video视频播放的同时加水印,图片加水印同样的原理

    经常能看到播放视频的网站上加水印的效果,记录下成果以备后续看: 效果图如下: h5页面视频播放的同时加水印,有以下3种方法可尝试: 在原视频上添加,由于每次登陆的用户不一样,需要根据用户名动态确定水印 ...

  7. PHP多图片上传 并检查 加水印 源码

    参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folder : 上传文件路径 $watermark : 是否附加水印(1为加水印,其他为不加 ...

  8. 批量修改图片以及加水印

    好久木有来写点什么了.. 前段时间挺忙的. 今天上来分享一个,这几天我给商城图片加水印的代码吧.因为产品编辑那边是先把图片都上传完成了,所以只能做批量修改图片来完成给所有图片加水印的效果. 类似DX. ...

  9. ffmpeg java linux水印,Linux环境用FFmpeg给视频加水印详细步骤

    FFmpeg给视频添加水印,根据官方文档的介绍可以知道FFmpeg在编译安装的时候还需要加 –enable-libfreetype.–enable-libfontconfig. --enable-li ...

  10. golang实现给图片加水印

    2019独角兽企业重金招聘Python工程师标准>>> 最近跟在写golang图片加水印的方法,这里用的是一些基本的功能. package mainimport ("fmt ...

最新文章

  1. word2vec应用场景_Embedding在腾讯应用宝的推荐实践
  2. BZOJ 2152 「国家集训队」聪聪可可(点分治)【BZOJ计划】
  3. Oracle11g创建表空间
  4. 【CLR via C#】CSC将源代码编译成托管模块
  5. linux账号管理笔记
  6. golang-flag的问题
  7. 浅谈ASP.NET Forms验证
  8. HTML表单提交规则
  9. [读书笔记]TCP/IP详解V1读书笔记-1
  10. S5PV210的地址映射图
  11. 多系统引导工具支持Linux,多系统引导工具(BootThink)
  12. 苹果 Siri 被曝涉嫌泄露用户隐私;中国联通回应 5G 入网问题;PHP 7.4 beta 1 发布 | 极客头条...
  13. 面向模式的软件体系结构
  14. Amesim车辆仿真--入门
  15. java新加入,网盘,磁力搜索以及互联网匿名工具
  16. 隐马尔可夫模型简单介绍
  17. 计算机主机只有一块硬盘,电脑双硬盘只显示一个怎么办
  18. 访问服务器显示我被拒绝,连接到服务器localhost:8080被拒绝(The connection to the server localhost:8080 was refused)...
  19. 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能
  20. 学习-软件测试-Selenium-unittest-Maven-Jmeter

热门文章

  1. 荐书丨如何快速成为150万+小程序开发者中的一员
  2. 《数源思维》提问工具之“语法套”
  3. 每周荐书:Swift、Java、React(评论送书)
  4. 《英雄联盟》设计师NORMAN的游戏设计之路
  5. 3.4 RNN网络扩展:堆叠RNN、递归神经网络、图网络
  6. 【杂谈】我学习这么好,为什么找不到工作?
  7. 正则表达式 - C语言
  8. Android SQLiteDatabase.query()各个参数的意义
  9. 设置 CSDN 博文里代码块的颜色
  10. 单片机中断函数的编写