华域联盟 .Net 理解HttpHandler,并为所有*.jpg图片生成一段文字于图片上

理解HttpHandler,并为所有*.jpg图片生成一段文字于图片上

接口IHttpHandler的定义如下:

复制代码 代码如下:

interface IHttpHandler

{

void ProcessRequest(HttpContext ctx);

bool IsReuseable { get; }

1新建一网站,名为MyHttpHandlerTest

2右击添加,选择类库,取名为MyHttpHandler

3-在上一步新建的类库上右键添加System.Web引用

主要代码:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.SessionState;

namespace MyHttpHandler

{

public class Class1:IHttpHandler,IRequiresSessionState

{

#region IHttpHandler成员

public bool IsReusable

{

get { return true; }

}

public void ProcessRequest(HttpContext context)

{

context.Response.Write("handler处理");

}

#endregion

}

}

4-在MyHttpHandler类库上右键,生成,取名为MyHttpHandler

5-在web.config中的system.web节点中天下如下节点

<httpHandlers>

<add verb="*" path="Handler1.aspx" type="MyHttpHandler.Class1,MyHttpHandler"/>

<!--

配置文件中的选项说明:

・ verb可以是"GET"或"POST",表示对GET或POST的请求进行处理。"*"表示对所有请求进行处理。

・ Path指明对相应的文件进行处理,"*.aspx"表示对发给所有ASPX页面的请求进行处理。可以指明路径,如"/test/*.aspx",表明只对test目录下的ASPX文件进行处理。

・ Type属性中,逗号前的字符串指明HttpHandler的实现类的类名,后面的字符串指明Dll文件的名称。

格式如:type="自定义HttpHandler的实现类的全名,自定义HttpHandler的实现类的命名空间(即Dll名)"

或 type="自定义HttpHandler的实现类的全名"

-->

</httpHandlers>

6-在MyHttpHandlerTest右键添加引用,选择项目找到刚才编译后的.dll文件

7-运行Handler1.aspx,页面显示:


下面我们利用HttpHandler将一段文字生成于图片中

添加一个类,默认为Class.cs

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.SessionState;

using System.Drawing;

/// <summary>

/// Class1 的摘要说明

/// </summary>

public class Class1:IHttpHandler

{

public Class1()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public bool IsReusable

{

get { return true; }

}

private static Image OldImage = null;

private static Image GetOldImage(HttpContext context)

{

if (OldImage == null)

{

OldImage = Image.FromFile(context.Server.MapPath("~/Images/Old.jpg"));

}

return OldImage.Clone() as Image;

}

public void ProcessRequest(HttpContext context)

{

Image newimage = GetOldImage(context);

Graphics gh = Graphics.FromImage(newimage);

Font font = new Font("Monaco", 24.0f, FontStyle.Regular);

string writetext = HttpUtility.UrlEncode(context.Request.QueryString["writetext"]);

gh.DrawString(HttpUtility.UrlDecode(writetext), font, new SolidBrush(Color.LightBlue), 20.0f, newimage.Height - font.Height - 30);

newimage.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

gh.Dispose();

newimage.Dispose();

}

}

新建一个.aspx页面,添加一个HyperLink控件,再在其.cs文件中添加一段代码传值

复制代码 代码如下:

protected void Page_Load(object sender, EventArgs e)

{

HyperLink1.NavigateUrl = "img.jpg?writetext=" + HttpUtility.UrlEncode("大蜗牛");

}

另外还需在web.config文件中将httpHandlers节点中改为如下

<add verb="*" path="*.jpg" type="Class1"/>

表明对所有的.jpg格式的文件才会处理

参考《道不远人 深入解析asp.net 2.0控件开发》

本文由 华域联盟 原创撰写:华域联盟 » 理解HttpHandler,并为所有*.jpg图片生成一段文字于图片上

转载请保留出处和原文链接:https://www.cnhackhy.com/43428.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部