博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET HttpHandler加水印
阅读量:6990 次
发布时间:2019-06-27

本文共 3495 字,大约阅读时间需要 11 分钟。

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

运行到浏览器的时候:

二、全局Handler方式

1、修改web.config,将所有对.jpg内容的访问转到Httphandler处理程序。

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

你可能感兴趣的文章
scrapy初体验 - 安装遇到的坑及第一个范例
查看>>
OC内存管理
查看>>
C#中Split用法
查看>>
3月6日 c#语言
查看>>
[LeetCode] Surrounded Regions, Solution
查看>>
MySQL系列:数据库基本操作(1)
查看>>
cpu真实核数
查看>>
hdu1058(dp)
查看>>
android EditText与TextView几个常用的属性
查看>>
SDN第五次上机作业
查看>>
redis 重要的配置参数
查看>>
Oracle 高级编程 01 ~
查看>>
JS重点整理之JS原型链彻底搞清楚
查看>>
springboot 配置文件
查看>>
浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览
查看>>
两个list<object> 比较 得到相同数据 差异数据
查看>>
The road to learning English-Writing
查看>>
Codeforces 990B :Micro-World
查看>>
interceptor拦截器
查看>>
课堂练习
查看>>