【问题标题】:Need to generate a image in ASP.Net through webservice需要通过webservice在ASP.Net中生成图片
【发布时间】:2009-02-16 07:34:12
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: .net asp.net web-services


    【解决方案1】:

    而不是让 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;
    }
    

    【讨论】:

      【解决方案2】:

      这里是让 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 调用。你就完成了

      【讨论】:

      • 嗯,我也关心第二部分。如何使用 Javascript 显示此图像。我想使用 ASHX 文件更容易。
      【解决方案3】:

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

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

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

      如果你用谷歌搜索,你应该会找到很多这方面的资源。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-02
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2011-02-10
        • 1970-01-01
        相关资源
        最近更新 更多