需要通过webservice在ASP.Net中生成图像

时间:2009-02-16 07:34:13

标签: .net asp.net web-services

对于我正在开发的新asp.net应用程序,我想在运行时使用webservice(返回字节)生成一个图像,并使用Javascript将其显示为图像(这样我就可以使用ajax功能。

任何想法如何做到这一点?

或者有关如何在运行时生成图像并使用Ajax在我的网页上显示(不得回发)的任何想法,而不必将图像保存到硬盘上的任何位置?

谢谢!

3 个答案:

答案 0 :(得分:6)

而不是让Web服务放置一个ASHX页面,其中包含处理输入参数的查询字符串参数。 确保Response.Content类型为image / png

此ASHX页面将动态生成图像流并将其发送到请求图像对象。这样就没有保存在服务器上的图像文件。

Here is a links with full code for the ASHX .

完成此操作后,在JavaScript中通过DOM访问图像对象并设置/更改SRC属性。

function ChangeImage(param1, param2)
{
  var url = "http://someserver/somepage.ashx?param1=" + param1 + "&param2=" + param2;
  var image1 = document.getElementById("MyImage");
  image1.src = url;
}

答案 1 :(得分:1)

以下是使用ashx文件为您返回图像的代码。

现在,将以下处理程序信息添加到web.config

<httpHandlers>
  <add verb="*" path="ImageGenerator.ashx" type="MyHandlers.HttpImageHandler, MyHandlers" />
</httpHandlers>

以下是Allen Guest's Blog

中的一些代码

ImageGenerator.ashx

namespace MyHandlers
{
      public class HttpImageHandler : IHttpHandler
      {
        private string GetExtension(string url)
        {
          string extension = "";
          if (null != url)
          {
            int indexSeperator = url.LastIndexOf(".");
            if (indexSeperator > -1)
              extension = url.Substring(indexSeperator + 1, url.Length - indexSeperator - 1).ToUpper();
          }
          return extension;
        }

        private string GetContentType(string url)
        {
          switch (GetExtension(url))
          {
            case "JPG" :
            case "JPEG" :
              return "image/jpg";
            case "PNG" :
              return "image/png";
            case "GIF" :
              return "image/gif";
            default :
              return "";
          }
        }

        private ImageFormat GetImageFormat(string url)
        {
          switch (GetExtension(url))
          {
            case "JPG" :
            case "JPEG" :
              return ImageFormat.Jpeg;
            case "PNG" :
              return ImageFormat.Png;
            case "GIF" :
              return ImageFormat.Gif;
            default :
              return ImageFormat.Bmp;
          }
        }

        private Image GetImage(string url)
        {
          HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(url);
          HttpWebResponse wRes = (HttpWebResponse)(wReq).GetResponse();
          Stream wStr = wRes.GetResponseStream();
          return Image.FromStream(wStr);
        }

        #region IHttpHandler Members
        public void ProcessRequest(HttpContext context)
        {
          string url = context.Request.QueryString["imageUrl"];
          if (null != url)
          {
            context.Response.Clear();
            context.Response.ContentType = GetContentType(url);
            Image img = GetImage(url);
            img.Save(context.Response.OutputStream, GetImageFormat(url));
          }
          context.Response.End();
        }

        public bool IsReusable
        {
          get { return false; }
        }
        #endregion
      }
}

通过将图像传递给imageUrl参数来对ashx文件进行javascript调用。而且你已经完成了

答案 2 :(得分:1)

我建议你实现一个HttpHandler,而不是使用Web服务。

我为此使用了一个Web服务,你的java脚本代码必须根据收到的二进制数据创建一个图像,如果不是很困难,那将是笨拙的。

创建httphandler很简单,只需创建一个实现IHttpHandler接口的类,然后在web.config文件中注册它。

如果你谷歌的话,你应该找到很多资源。

关于显示图像,你可以使用这样的常规img-tag:

<img src="yourhttphandler.ashx?id=1" />

要更新它,您只需为src-attribute设置一个新值:

yourimage.src = "yourhttphandler.ashx?id=2";