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

[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 时加上指定的文字(转)


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11458264.html
今日推荐