Quelle est la meilleure façon de renvoyer une image avec 2 paramètres (x et y pour redimensionner).
Par exemple
~/api/image12345/200/200
Renvoie un 200 par 200 jpg / png / ou gif
Dois-je retourner un System.Drawing.Image
objet ou définir manuellement le HTTPReponseMessage.Content
?
asp.net
asp.net-web-api
image
Max Alexander
la source
la source
Réponses:
Vous ne devriez pas renvoyer a
System.Drawing.Image
, sauf si vous ajoutez également un formateur qui sait comment le convertir en octets appropriés ne se sérialise pas comme octets d'image comme vous vous en doutez.Une solution possible consiste à renvoyer un
HttpResponseMessage
avec l'image stockée dans son contenu (comme illustré ci-dessous). N'oubliez pas que si vous voulez l'URL que vous avez affichée dans la question, vous aurez besoin d'un itinéraire qui mappe les paramètres {imageName}, {width} et {height}.public HttpResponseMessage Get(string imageName, int width, int height) { Image img = GetImage(imageName, width, height); using(MemoryStream ms = new MemoryStream()) { img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new ByteArrayContent(ms.ToArray()); result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); return result; } }
Mais encore une fois, si vous faites cela dans de nombreux endroits, emprunter la voie du formateur peut être la voie «recommandée». Comme presque tout en programmation, la réponse dépendra de votre scénario.
la source
GetImage
méthode?Les images sont lourdes. ASP.NET WebForms, HttpHandlers, MVC et Web API font tous un travail absolument terrible en servant des fichiers statiques. IIS fait un très bon travail à cet égard - souvent 20 à 100 fois plus efficacement.
Si vous souhaitez obtenir de bonnes performances, effectuez une réécriture d'URL au plus tard pendant PostAuthorizeRequest, afin qu'IIS puisse récupérer et servir le fichier. Oui, cela signifie la gestion des événements au niveau de HttpModule.
[Clause de non-responsabilité: je suis l'auteur de l'article suivant et du projet open-source]
Si vous faites quelque chose de dynamique avec des images, consultez cet article sur les pièges du traitement d'image à éviter et envisagez de jeter un coup d'œil à ImageResizer . Il dispose d'une excellente mise en cache disque (qui utilise la gestion des fichiers statiques IIS) et est facile à connecter à la génération d'images de tout type. Il a également des liaisons optionnelles pour AForge, FreeImage et WIC, si vous avez besoin de progresser.
la source