[ASP.NET] 如何透过 HTTP Handler 让 Web 项目中的图片 Response 时加上指定的文字(转)

这两天在网络上逛街的时候,

看到“Topcat”的一篇文章

“如何透过 HTTP Handler 让 Web 项目中的图案(JPG)Response时加上指定的文字”

因为之前大多都另外使用 ashx 文件刷新图片,

输出时在使用者网页上看到的连结也大多会是 *.ashx,看久了总觉得很怪╰(‵□′)╯

还好有看到这篇文章,在此先谢谢 Cat 大大…

以下,转录自“topcat 姗舞之间的极度凝聚”

另外,请 Cat 大大恕我修改了 小…小…小…部分

============================================================================

我们经常可以在别的网站看到,当上传图片到网站后,显示出来的图片会加上一个该网站的名称文字,或者是加上该网站的Logo。

这个部分可以透过“HTTP Handler”来实践他。

何谓“HTTP Handler”?请参考这一篇【ASP.NET Request处理的过程】

了解了“HTTP Handler”在 ASP.NET Request 处理过程所扮演的角色与位置后,接着就来看看如何撰写“HTTP Handler”。

  • 撰写“HTTP Handler”

    • 首先在您的项目中,增加一个新的项目,选择【Class】。

      如果您的项目中没有App_Code的目录,他会自动的问您是否将 Class 存放在 App_Code 目录中,请选择是,该 Class 的文件名称为【JPGHandler.vb】

   1: Imports Microsoft.VisualBasic
   2: Imports System.Web
   3: Imports System.Drawing
   4: Imports System.Drawing.Imaging
   5: Imports System.IO
   1: Public Class JPGHandler
   2:     Implements IHttpHandler
   3:? 
   4: End Class
   1: Public ReadOnly Property IsReusable() As Boolean _
   2:     Implements System.Web.IHttpHandler.IsReusable 
   3:     Get 
   4:? 
   5:     End Get
   6: End Property
   7:? 
   8: Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) _
   9:     Implements System.Web.IHttpHandler.ProcessRequest 
  10:? 
  11: End Sub
    • 我们先将会用到的 Namespace Imports进来
    • 接着,要实践【IHttpHandler】界面
    • 当输入了【Implements IHttpHandler】按下Enter后,会自动把相关的语法产生如下:
   1: Public ReadOnly Property IsReusable() As Boolean _
   2:     Implements System.Web.IHttpHandler.IsReusable 
   3:     Get 
   4:         Return True 
   5:     End Get 
   6: End Property
   1: Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) _
   2:     Implements System.Web.IHttpHandler.ProcessRequest
   3:? 
   4:     ‘设计您要加上的文字
   5:     Dim s As String = "Topcat--姗舞之间的极度凝聚"
   6:     ‘定义数据路径
   7:     Dim JpgFile As String = context.Request.PhysicalPath
   8:     ‘取得 Jpg Image
   9:     Dim Jpg As Image = Image.FromFile(JpgFile)
  10:     ‘声明 Graphics 读取 Jpg
  11:     Dim Gphs As Graphics = Graphics.FromImage(Jpg)
  12:     ‘声明使用的字体、大小、型态
  13:     Dim Fnt As New Font("标楷体", 14, FontStyle.Bold)
  14:     ‘设定颜色
  15:     Dim Brsh As New SolidBrush(Color.Yellow)
  16:     ‘画上文字
  17:     Gphs.DrawString(s, Fnt, Brsh, 0, 0)
  18:     ‘输出处理好的图形
  19:     Dim ms As MemoryStream = New MemoryStream
  20:     Jpg.Save(ms, ImageFormat.Jpeg)
  21:     Gphs.Dispose()
  22:     Jpg.Dispose()
  23:? 
  24:     context.Response.Clear()
  25:     context.Response.ContentType = "image/jpeg"
  26:     context.Response.BinaryWrite(ms.ToArray())
  27:     context.Response.End()
  28: End Sub
    • 先设定让 IsReusable 的属性回传为 True
    • 接着撰写处理 ProcessRequest 的部分
   1: 
   2:  
   3:      
   4:  
   5: 
    • 接着,就要设定 Web.Config 指定副文件名用哪个 Handler 处理
    • 测试运行程序
      • 以上这样就完成的程序的撰写的部分,但是实际上要运行时却有需要注意的地方,首先如果您是使用文件类型开启项目,那么不用作其他的设定,就能够直接的看到效果
      • 但是如果您是透过IIS来浏览,那么还要做一个设定,就是指定副文件名 jpg 要使用 isapi 来处理,小喵测试过使用XP Pro内的IIS,要做这样的设定却会发生无法按【确认】按钮,小喵猜测可能是 XP Pro IIS 的 Bug 吧!!
      • 如果是2000 Server或者2003 Server,设定步骤如下
        1. 开启IIS
        2. 找到您的Web项目
        3. 鼠标右键→内容→【目录】页签
        4. 确认是否有建立为应用程序
        5. 按下【设定】开启【应用程序设定】窗口
          1. 在应用程序副文件名中【新增】
          2. 可执行文件后的【浏览】,找到

            C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll

          3. 副文件名输入【jpg】
          4. 按下【确定】
      • 经过这样的设定后,就可以浏览该项目中的 jpg 会在左上角加上指定的文字了。

原文:大专栏  [ASP.NET] 如何透过 HTTP Handler 让 Web 项目中的图片 Response 时加上指定的文字(转)

原文地址:https://www.cnblogs.com/chinatrump/p/11458264.html

时间: 2024-10-13 01:11:41

[ASP.NET] 如何透过 HTTP Handler 让 Web 项目中的图片 Response 时加上指定的文字(转)的相关文章

向MyEclipse中的web项目中导入js文件时,出现小红叉

这个问题困扰我很久.刚开始时,也没有重视,因此也没有在网上寻找解决方法.最近做项目时再一次出现了这样的问题,于是决定还是找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解药.具体方法如下: 首先右击js文件->MyEclipse->Exclude from Validation.(其实此时小红叉就已经消失了) 然后再右击js文件->MyEclipse->run Validation. Ok,就这么easy.希望给小伙伴们能带来一些帮助.

asp.net Web项目中使用Log4Net进行错误日志记录

使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息. 那么我们如何在Web项目中使用Log4Net呢? 一.基本配置 1.下载Log4Net,地址如下:http://logging.apache.org/log4net/download_log4net.cgi,如下图所示: 2.下载到本地后

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

非web项目中使用XDT的实例

概述 XDT是Asp.net 4.0中的一个新特性,可以让使用者在Web项目中在不同的生成类型下,快速切换配置文件(如在debug场景下使用测试配置数据库,在Release场景下使用正式配置数据库). 但在非web项目中,VS并未提供如此方便的功能.这时如果我们同样想使用xdt transforms的功能,就需要自己配置MSbuild文件. 在本例中我们是通过修改MSBuild配置文件,来使非web项目同样可以使用XDT功能. MSBuild全称(Microsoft Build Engine),

web项目中的 log4net的配置

最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对.看出来的朋友平指出.下面是我自己亲测的,可以用! 1.web项目中的web.config 配置log4net <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细消息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --

Web项目中创建简单的错误处理页面

当应用程序出现错误的时候,如果没有做错误页面处理的话,会直接输出一些敏感的信息出来,有时候甚至会直接将项目所在的物理路径给显示出来,严重缺乏安全性,并且错误种类繁多,页面风格不一,导致用户体验不好,本文介绍如何在web项目中创建错误页面,从而友好的提示错误信息. 一,创建错误页面error.aspx,前台代码如下(可根据实际需要增加元素): <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu

在C#的Web项目中调用Matlab代码的方法

为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果.前段时间已经拖延了1个多月,一方面因为实习越来越多事情,时间减少了很多:但更重要在于C#调用Matlab的方法真心麻烦,C#的Web项目中进行这个操作貌似会碰到更多细节上的问题.而且总是很不稳定,操作系统.Matlab或VS的版本.遗漏一些文件或步骤都会造成失败!这个问题本人已经搞了很长时间,直至前几天,在同学的帮助下,自己再弄一遍,总算成功了!下面我及时把这个

WEB 项目中的全局异常处理

在web 项目中,遇到异常一般有两种处理方式:try.....catch....:throw 通常情况下我们用try.....catch.... 对异常进行捕捉处理,可是在实际项目中随时的进行异常捕捉,会造成代码重复和繁杂,我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它. 首先,我们在可能发生异常的方法,全部throw出来,即dao抛给service.service给controller.controller抛给前端控制器: 然后由前端控制器调用 全局异常处理器  对异常

06_在web项目中集成Spring

在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloService helloService = (HelloService) applicationContext.getBean("helloS