这两天在网络上逛街的时候,
看到“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】
- 首先在您的项目中,增加一个新的项目,选择【Class】。
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,设定步骤如下
-
-
-
- 开启IIS
- 找到您的Web项目
- 鼠标右键→内容→【目录】页签
- 确认是否有建立为应用程序
- 按下【设定】开启【应用程序设定】窗口
- 在应用程序副文件名中【新增】
- 可执行文件后的【浏览】,找到
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll
- 副文件名输入【jpg】
- 按下【确定】
-
-
-
-
- 经过这样的设定后,就可以浏览该项目中的 jpg 会在左上角加上指定的文字了。
-
原文:大专栏 [ASP.NET] 如何透过 HTTP Handler 让 Web 项目中的图片 Response 时加上指定的文字(转)
原文地址:https://www.cnblogs.com/chinatrump/p/11458264.html