ASP.NET HttpHandler加水印
一、指定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加水印的更多相关文章
- ASP组件AspJpeg(加水印)生成缩略图等使用方法
ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出 ...
- Web 上传图片加水印
上传图片加水印 需要使用控件FileUpload 上传按钮Image控件展示上传的图片,页面中拖入三个控件 <form id="form1" runat="serv ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化
<?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...
- thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印
今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...
- 【转】WPF TextBox和PasswordBox加水印
Textbox加水印 Textbox加水印,需要一个VisualBrush和触发器验证Text是否为空,在空的时候设置背景的Brush就可以实现水印效果. <TextBox Name=" ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- 使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等
添加水印,并且增加权限 @Test public void addWaterMark() throws Exception{ String srcFile="D:\\work\\pdf\\w ...
- 用node.js给图片加水印
一.准备工作: 首先,确保你本地已经安装好了node环境.然后,我们进行图像编辑操作需要用到一个Node.js的库:images.这个库的地址是:https://github.com/zhangyua ...
随机推荐
- angular2-模块
Angular模块 (NgModule) Angular 模块是带有 @NgModule 装饰器函数的类. @NgModule接收一个元数据对象,该对象告诉 Angular 如何编译和运行模块代码. ...
- 中值滤波C语言优化
中值滤波C语言优化 图像平滑是图像预处理的基本操作,本文首先用不同的方法对一张图片做预处理比较它们效果的不同,然后针对中值滤波,实现了一种快速实现.(其实是copy的opencv实现,呵呵).因为op ...
- 关于method not exist:think\db\Query->render错误解决方法
{volist name="Teachers" id="Teachers" key="key"} <tr> <td> ...
- Oracle 通过undo块查看事务信息
数据库版本:Oracle 11.2.0.3 RAC 实验目的:通过undo块查看Oracle事务信息 实验细节:1 开始一个事务SQL> select * from t1; ID NAME--- ...
- 【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数
QKeyEvent及其相关的处理函数,比如QKeyPressEvent.QKeyReleaseEvent()等在QtGui编程中非常常用,尤其是需要借助标准键盘的编码来实现一些自定义功能的时候. 这算 ...
- 在浏览器里使用SAPGUI里的SE80
效果如图:点击Fiori launchpad的SE80对应的tile: 即可在浏览器里打开SE80 具体步骤 (1). 在后台找到Fiori catalog page ID: SAP_FIORI_EX ...
- 确定浏览器是否支持某些DOM模块
var supportDOM2Core = document.implementation.hasFeature("Core","2.0"); var supp ...
- OC @protocol(声明协议 )
@protocol Study; int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[[Stud ...
- 2018.9.30 Java中数组的存储与内存分配
java 数组与集合的区别 集合:长度可变,可以存放不同类型的元素,只能存放引用类型! 数组:长度固定,只可以存放相同的同种类型的元素,可以存放数据类型也可以存放引用类型! 数组定义的三种方式 // ...
- 【JeeSite】用户管理
组织机构使用ztree插件,加载数据时使用数据权限过滤(只能访问登录用户的单位及其下属单位), 点击部门加载相应用户. <!-- 数据范围过滤 --> BaseService.data ...