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 ...
随机推荐
- 介绍一款web端的截图工具
牛牛截图,web端的一款截图工具,下面是代码及实例. 依赖jquery-1.7.min.js /**************************************************** ...
- SQL Server 2008 R2如何开启数据库的远程连接(转)
SQL Server 2008默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远程连接数据库.需要做两个部分的配置: SQL Server Manag ...
- 单链表的插入伪算法和用C语言创建单链表,并遍历
非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...
- SQL Server2008宝典 全书代码
-- ============================================= -- Create database template -- ==================== ...
- linux C之判断文件或目录是否存在 access函数
http://blog.sina.com.cn/s/blog_6a1837e90100uh5d.html access():判断是否具有存取文件的权限 相关函数 stat,open,chmod, ...
- wx.grid
wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...
- wxpython 简单表格控件
import wx, wx.grid class GridData(wx.grid.PyGridTableBase): _cols = "a b c".split() _data ...
- 单例模式(C++)
#include <iostream> #include <string> using namespace std; class singleton { private: si ...
- haproxy学习——安装(一)
安装包:haproxy-1.5.4.tar.gz (挺小的,大约1.3M) ①.首先要sz到本地虚拟机上(centos-6.5),tar zxvf haproxy-1.5.4.tar.gz,完成解压. ...
- API 的历史
原文出处: apievangelist 译文出处:灯下鼠 历史无处不在. 研究我们来自何方,有助于指引我们前行.科技的发展日新月异,但时常停一下匆忙的脚步,稍稍回顾一下历史,却总是有益的. 下面就 ...