2009-02-16 9 views
3

Pour ma nouvelle application asp.net que je développe je voudrais générer une image à l'exécution en utilisant un webservice (return bytes), et montrer cela comme une image en utilisant Javascript (pour que je puisse avoir une fonctionnalité ajax.Besoin de générer une image dans ASP.Net via webservice

toute idée comment faire?

Ou des idées quant à la façon dont je peux générer une image lors de l'exécution, et le montrer sur ma page Web en utilisant Ajax (ne doit pas postback), sans avoir à enregistrer l'image à n'importe quel emplacement sur le disque dur?

Merci!

Répondre

6

Au lieu d'avoir le service Web mis une page ASHX avec les paramètres de chaîne de requête manipulant les paramètres d'entrée. Assurez-vous que le type Response.Content est image/png

Cette page ASHX génère le flux d'images à la volée et l'envoie à l'objet image requérant. Avec cela, il n'y a pas de fichier image enregistré sur le serveur.

Here is a links with full code for the ASHX .

Après avoir fait cela, en JavaScript accéder à l'objet image via DOM et configurer/modifier la propriété SRC.

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

Voici le code pour avoir un fichier ashx pour retourner l'image pour vous.

Maintenant, ajoutez les informations suivantes à votre gestionnaire web.config

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

Voici un code de 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 
     } 
} 

Passer un appel au javascript ashx fichier, en passant l'image pour obtenir comme un paramètre imageUrl. Et vous avez terminé

+0

Eh bien, je suis préoccupé par la deuxième partie aussi. Comment afficher cette image en utilisant Javascript. Je suppose que c'est plus facile d'utiliser un fichier ASHX. –

1

Au lieu d'utiliser un service Web, je vous suggère d'implémenter un HttpHandler. Si vous utilisez un service Web pour cela, votre code de script java doit créer une image à partir des données binaires reçues et qui sera maladroit si ce n'est pas très difficile.

Créer un httphandler est facile, il suffit de créer une classe qui implémente l'interface IHttpHandler et ensuite l'enregistrer dans votre fichier web.config.

Vous devriez trouver beaucoup de ressources sur ce si vous google il.

Quant à l'affichage de l'image, vous pouvez simplement utiliser régulièrement img-tag comme ceci:

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

Pour le mettre à jour, vous pouvez simplement définir une nouvelle valeur pour la src attribut:

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