一、指定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. HTML5 Dashboard – 那些让你激动的 Web 技术
  2. 魔改GPT自动写网文,速度一秒十字,还能给太监作品无限续更 | 开源
  3. Javascript类型转换的规则
  4. c语言通讯录文件存储位置,c语言实现通讯录(存入文件)
  5. windows 7 睡眠和休眠的区别
  6. 测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站
  7. linux是只读添加 来覆盖,Linux之指令 重定向 文件覆盖和文件追加
  8. [LeetCode][JavaScript]Power of Three
  9. [转]Chrome 错误代码:ERR_UNSAFE_PORT
  10. 李宏毅自然语言处理——文本风格转换
  11. 视频教程-区块链技术通俗讲解-区块链
  12. (转载)SoftIce的安装、配置以及一些基本操作
  13. FPGA工程师面试试题集锦41~50
  14. 全方位教你怎么看懂英国的车牌
  15. Ubuntu虚拟机识别不了SD卡的解决办法
  16. 如何利用Python编程批量处理Excel来提高日常工作效率!
  17. webpack入门学习笔记10 —— 在项目中使用图片资源
  18. AR2开源桌面机器人
  19. 快讯:我国高中数学课本即将发生全面变革,微积分下放高中不是梦!
  20. DICOM:fo-dicom、dcm4che14、dcm4chee等开源库持续自我维护

热门文章

  1. 如何通过XMind 实践OKR 工作法
  2. 直播实录丨十年主导15个产品从0到1,她的经验与思考现场拆解
  3. 书单丨成为全栈工程师的5种硬实力
  4. 标题决胜武器:标题常用的14个套路
  5. {知道力} = {怎么做} + {为什么} 并且 {为什么} {怎么做}
  6. 数值优化(二):信赖域方法与二维空间法
  7. bcp 不能调用where 子句_三、p18-28条件查询、分组聚合、排序where/group by/having/order by...
  8. python ssh库paramiko学习
  9. SLAM会议笔记(一)LOAM
  10. Dart基础第6篇:集合类型List Set Map详解 以及循环语句 forEach map where any every