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 ...
随机推荐
- SQL Server 与 ADO.NET 数据类型映射
SQL Server 数据类型映射 .NET Framework 4.5 SQL Server 和 .NET Framework 基于不同的类型系统. 例如,.NET Framework Decima ...
- VC++上机实习
I.课程设计基本练习题目(18分×4) [A组]请从以下1-3题中任意选做一题 1.输出1至100之间每位数的乘积大于每位数的和的数,例如对于数字12,有1*2<1+2,故不输出该数:对于27, ...
- python 继承式多线程
Thread是线程类,有两种使用方法,直接传入要运行的方法或从Thread继承并覆盖run(): Thread继承 import threading import time class MyThrea ...
- scope 作用域(bean 的生存范围)
默认是 singleton ,单例模式,如下代码: @Test public void testAddUser() throws Exception { ApplicationContext ctx ...
- memcached与spring集成
一.背景 销售CRM(项目A)将负责管理项目信息系统(项目B)的支付与权限 上级要求为避免频繁调用CRM接口,中间放一级缓存,但要做到缓存中保证最新数据 因项目B已使用memcache作缓存,所以决定 ...
- 【Leetcode】【Easy】Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have you ...
- monkey使用
一.Monkey测试原理:Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...
- ZHS16GBK编码中汉字缺失
生产中使用ZHS16GBK编码的Oracle数据库,若出现字,则会出现乱码 原因是此字不存在在ZHS16GBK编码中 解决方法可以:此二字结构相同,但是后面的在ZHS16GBK编码中出现
- Java里面String的编码问题
Java里面内置字符串全部是utf-16编码,详细的编码方式看这里 import java.nio.charset.Charset; import java.util.Arrays; import j ...
- 笔记本win8系统共享wifi上网方法
华硕笔记本电脑,安装了win8系统,使用wifi上网,由于连接无线路由的机器太多,超过路由连接数上限,因此转为使用笔记本共享wifi方式给手机上网. 最终上网方式为: 笔记本网卡接入无线路由器上网,笔 ...