Créer image PNG avec C# HttpHandler webservice
Je voudrais être en mesure de créer une simple image PNG, dire d'un carré rouge à l'aide d'un c# service basé sur le web pour générer l'image, appelée à partir d'une <img src="myws.ashx?x=100>
élément HTML.
un exemple de code HTML:
<hmtl><body>
<img src="http://mysite.com/webservice/rectangle.ashx?size=100">
</body></html>
Est il y a quelqu'un qui peut bricoler un simple (de travail) de classe C# juste pour me faire? Une fois hors et va je suis sûr que je peux terminer ce hors de réellement faire ce que je veux faire.
- Fin du jeu est de créer de simples Rouge/Orange/Vert (RAG) incorporé statut des repères pour un pilotés par les données de la page web qui affiche les métriques de performance etc*
- Je voudrais utiliser le PNG est que je prévois l'utilisation de la transparence dans l'avenir*
- ASP.NET 2.0 C# solution s'il vous plaît... (je n'ai pas de production de 3,5 boîte encore)
tia
SOLUTION
rectangle.html
<html>
<head></head>
<body>
<img src="rectangle.ashx" height="100" width="200">
</body>
</html>
rectangle.ashx
<%@ WebHandler Language="C#" Class="ImageHandler" %>
rectangle.cs
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
int width = 600; //int.Parse(context.Request.QueryString["width"]);
int height = 400; //int.Parse(context.Request.QueryString["height"]);
Bitmap bitmap = new Bitmap(width,height);
Graphics g = Graphics.FromImage( (Image) bitmap );
g.FillRectangle( Brushes.Red, 0f, 0f, bitmap.Width, bitmap.Height ); //fill the entire bitmap with a red rectangle
MemoryStream mem = new MemoryStream();
bitmap.Save(mem,ImageFormat.Png);
byte[] buffer = mem.ToArray();
context.Response.ContentType = "image/png";
context.Response.BinaryWrite(buffer);
context.Response.Flush();
}
public bool IsReusable {
get {return false;}
}
}
pouvez-vous faire un gestionnaire http renvoie une image? disons une image bitmap ou un byte[] buffer à une méthode c# (fichier code-behind), d'où il est appelé? Je suis désolé si j'ai l'air stupipd mais je suis de nouveau à des gestionnaires http
voir la accepté de répondre?? Sinon, je ne comprends pas ce que tu veux dire et franchement, je ne sais pas comment le faire de toute façon. Mon c# est bleh!
Merci pour l'affichage de la solution m'a beaucoup aidé!
voir la accepté de répondre?? Sinon, je ne comprends pas ce que tu veux dire et franchement, je ne sais pas comment le faire de toute façon. Mon c# est bleh!
Merci pour l'affichage de la solution m'a beaucoup aidé!
OriginalL'auteur Guy | 2009-05-20
Vous devez vous connecter pour publier un commentaire.
De services Web, en particulier SAVON s'attendre à des choses comme une enveloppe XML avec les détails de l'appel. Vous feriez mieux d'utiliser un
HttpHandler
.Quelque chose comme ceci:
C'est très approximatif bien sûr. Vous souhaitez appeler, puis:
Merci - je l'ai! Aussi mineur faute de frappe sur la Réponse.ContentType et ImageFormat.Png Maintenant juste besoin d'apprendre à en tirer quelque chose / quelque chose...
Pour la mise en cache, j'ai vu que vous mentionnez, vous pouvez utiliser HttpRuntime.Cache viens de vider le byte[] retour de la MemoryStream.
Enfin je l'ai! Contexte d'utilisation.Réponse.BinaryWrite(tampon); Lloyd, si vous pouvez corriger la faute de frappe dans votre réponse, puis vous obtenez des points!!!
vous faites un gestionnaire http renvoie une image? disons une image bitmap ou un byte[] buffer à une méthode c# (fichier code-behind), d'où il est appelé? Je suis désolé si j'ai l'air stupipd mais je suis de nouveau à des gestionnaires http
OriginalL'auteur Lloyd
Un service web n'est pas adapté pour cela. Il renvoie un message dans un format spécifique, généralement de SAVON, de sorte qu'il ne peut pas être une image.
Utiliser une forme régulière de web au lieu de cela, lorsque vous supprimez tout le balisage à l'exception de la
@page
directive. Utiliser leBinaryWrite
méthode pour écrire les données d'image pour le flux de réponse.Exemple:
Il est possible de le faire via un web service, je le fais avec des fichiers Pdf. La clé est de le retourner comme un tableau d'octets, de le reconstituer à l'autre extrémité, puis l'écrire avec le ContentType.
V: Alors vous êtes seulement en utilisant le service web en tant que back-end pour une page web. Vous ne pouvez pas utiliser la réponse du service web directement, comme Guy demandé.
OriginalL'auteur Guffa
Je pense que @Lloyd réponse est un bon début.
J'ai eu des problèmes avec les transparences alpha et Png: Pouvez-vous faire une alpha PNG transparent avec C#?
OriginalL'auteur Keith
Il est une autre façon d'accomplir servant une image dynamique.
Pour la mise en œuvre:
Démarrer le service régulier service WCF et ajouter le service dans votre application.config
Vous pouvez passer des paramètres à la rendre plus dynamique.
OriginalL'auteur Jan Staal
Il n'est PAS possible de l'image de sortie à partir d'un WebService.
Vérifier: http://www.c-sharpcorner.com/UploadFile/gnsrinivas1511/Webservice05112009034709AM/Webservice.aspx
"Cela dépend de ce que l'on considère un web service." << je suis d'accord.
Ou juste retour binaire, comme mentionné dans Guffa post. 🙂
Désolé, j'ai peut-être ma terminologie mal (ou pas assez précis pour une communauté technique) je le prends .asmx est le retour de contenu xml? Je n'avais pas entendu parler de ashx avant maintenant.
asmx est webservice et ashx est un gestionnaire. Ashx est presque la même, comme aspx. Il met en œuvre IHttpHandler. Cochez cette pour plus de détails: stackoverflow.com/questions/619697/.... Il peut vous aider dans la création de l'image.
OriginalL'auteur NinethSense
Aussi, selon la façon dont vous le mettre en œuvre, s'il vous plaît être conscient que vous pourriez être vous-même la mise en place pour une attaque de DOS. Générer des images n'est pas le plus le processeur amical chose. Veuillez vous assurer d'avoir certains d'authentification et ou mécanisme de mise en cache en place pour aider à soulager cette douleur potentielle point.
OriginalL'auteur Chad Ruppert