HttpHandler:给指定路径下的图片添加水印显示
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace xumh
{
/**//// <summary>
/// 图片处理模块:给指定路径下的图片添加水印输出
/// 1.监视的目录路径,水印图片路径,默认图片三者都在web.config文件中设定
/// 2.请求的图片的路径不属于监视路径,直接输出图片
/// 3.请求的图片的路径属于监视路径,若图片不存在,显示默认图片,不加水印
/// 4.请求的图片的路径属于监视路径,且文件存在,添加水印
/// 水印图片存在:图片+水印图片,输出
/// 水印图片不存在:图片+水印文字,输出
///
/// 5.web.config部分如下:
/// <appSettings>
/// <!--要监视的路径-->
/// <add key="monitorPath" value="/images/bookcovers/"/>
/// <!--图书封面不存在时显示的默认封面图片的相对路径-->
/// <add key="defaultImage" value="images\default.jpg"/>
/// <!--相对于物理应用程序的根路径的水印图片的相对路径-->
/// <add key="watermarkImage" value="images\WaterMark.jpg"/>
/// </appSettings>
///
/// <httpHandlers>
/// <add verb="*" path="*.jpg" type="xumh.WatermarkHandler,WatermarkHandler"/>
/// </httpHandlers>
/// 许明会 2007-12-23 18:00 Visual Studio 2005 调试通过
/// </summary>
public class WatermarkHandler:IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
string url = context.Request.Url.AbsoluteUri.ToLower();
string monitorPath = System.Configuration.ConfigurationManager.AppSettings["monitorPath"];
//若图片不属于封面,直接输出图片:若图片不存在不做处理
bool IsInterestUrl = url.Contains(monitorPath);
System.Drawing.Image imgSource = null;
if (!IsInterestUrl)
{
if (!System.IO.File.Exists(context.Request.PhysicalPath))
return;
imgSource = System.Drawing.Image.FromFile(context.Request.PhysicalPath);
imgSource.Save(context.Response.OutputStream, imgSource.RawFormat);
imgSource.Dispose();
return;
}
//图片属于封面,但图片imageSource不存在,显示默认图片default.jpg
string physicalPath = context.Request.PhysicalPath;// context.Server.MapPath(url);
if (!System.IO.File.Exists(physicalPath))
{
string defaultImage = System.Configuration.ConfigurationManager.AppSettings["defaultImage"];
imgSource = System.Drawing.Image.FromFile(context.Request.PhysicalApplicationPath + defaultImage);
imgSource.Save(context.Response.OutputStream, imgSource.RawFormat);
imgSource.Dispose();
return;
}
//--===--------------------只要有封面图片,就为图片添加水印----------------------===---
string watermarkImage = System.Configuration.ConfigurationManager.AppSettings["watermarkImage"];
string watermarkImagePath = context.Request.PhysicalApplicationPath + watermarkImage;
bool bWatermarkImageExist =System.IO.File.Exists(watermarkImagePath);
imgSource = System.Drawing.Image.FromFile(physicalPath);
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(imgSource);
if (bWatermarkImageExist) //“水印图片”存在:存在则封面混合水印图片
{
System.Drawing.Image imgWatermark = System.Drawing.Image.FromFile(watermarkImagePath);
graphic.DrawImage(imgWatermark,
imgSource.Width - imgWatermark.Width, imgSource.Height - imgWatermark.Height,
imgWatermark.Width, imgWatermark.Height);
//把图片保存到输出流
imgSource.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
imgWatermark.Dispose();
}
else //“水印图片”不存在:输出文本
{
System.Drawing.Font font = new System.Drawing.Font("幼圆", 13.0f,System.Drawing.FontStyle.Bold);
graphic.DrawString("第三波+书店",font , System.Drawing.Brushes.Red, new System.Drawing.PointF());
imgSource.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
imgSource.Dispose();
graphic.Dispose();
//标明类型为jpg:如果不标注,IE没有问题,但Firefox会出现乱码
context.Response.ContentType = "image/jpeg";
context.Response.Flush();
context.Response.End();
}
}
}
转载于:https://www.cnblogs.com/flaaash/archive/2007/12/23/1011640.html
HttpHandler:给指定路径下的图片添加水印显示相关推荐
- 遍历指定目录下的图片文件 显示在gridview 并添加点击事件
先上图: gridview布局 <?xml version="1.0" encoding="utf-8"?> <GridView xmlns: ...
- 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml): <Window x:Class="SVG2Image.Ma ...
- 安卓调用系统拍照功能:1、启动拍照返回图片,2、启动拍照,图片存储在指定路径下
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓调用系统拍照功能,两种方式获取拍摄的照片. 1.启动系统拍照intent,并直接返回图片数据 2.启动系统拍照intent,拍照后存储在指定的路径 ...
- python 获取指定目录下的图片文件
import os#获取指定路径下所有的图片文件 def listfile(dirpath):# pathdir = os.listdir(dirpath) #图片列表imgFileList = os ...
- android 浏览指定相册,Android -- 采用系统相册浏览指定路径下照片
//打开系统相册 Intent intent=new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); s ...
- Qt5 实现文件复制并在指定路径下创建文件夹
最近在基于qt5平台的应用界面上想实现本地选择文件,并把文件拷贝到指定路径下.找到以下这篇文章参考,参考其中几个函数的写法实现了想要的功能,故记录一下,方便以后查找参考. 我在头文件中定义几个变量: ...
- Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式
Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式 运行环境 pom依赖 测试方法 测试效果 运行环境 1.springboot 2.2.x 2.maven 3.5.4 pom依赖 ...
- python3查找文件中指定字符串_Python3在指定路径下递归定位文件中出现的字符串...
[本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 代码如下: import os import sys __all ...
- R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录
最新文章
- 守护网络安全,我们一直在努力
- 人脸对齐--Dense Face Alignment
- HDU - 1429 胜利大逃亡(续) (BFS+状压)
- CACTI 0.87e 安装
- python正则判断_Python 正则表达式
- python ping利用线程池获取在线设备
- java控制台高级_K9s Kubernetes的高级控制台
- WebBrowser是IE内置的浏览器控件
- Ubuntu IPFS小白安装入门教程
- Python argparse模块、argparse.ArgumentParser()用法解析
- 软件测试有效性指标,软件测试用例评审有效性的44个衡量标准[1]
- CSO246未能找到类型或命名空间名“System“(是否缺少using指令或程序集引用?)
- ORACLE sql 高级查询
- Java实验(18) 幻灯片放映
- 微信小程序,map地图中在底部添加半透明视图布局
- 黄金分割法python实现
- 政务OA办公系统搭建现状
- Java JDK 下载官方网站
- 嵌入式在军工卫星应用手持终端领域的应用
- 模电和数电在应用上的区别和联系