2010-07-11 5 views
7

J'ai regardé les sites bêta de Stack Exchange et j'ai remarqué que chaque site en version bêta a un graphique en haut avec les mots «Applications Web Beta» ou «Gaming». Beta 'par exemple.Images dynamiques dans MVC (sites bêta Stack Exchange)

Je me demandais si ces images sont créées individuellement ou si elles sont créées dynamiquement d'une manière ou d'une autre? Est-il possible d'utiliser MVC.NET pour créer des fichiers PNG à la volée?

Si la réponse est trop compliquée pour ce forum, quelqu'un peut-il me diriger vers des articles qui vous aideront?

Merci à l'avance

Sniffer

Répondre

14

Oui, il y a un moyen de générer et servir des images dynamiquement avec ASP.NET MVC. Voici un exemple:

public class HomeController : Controller 
{ 
    public ActionResult MyImage() 
    { 
     // Load an existing image 
     using (var img = Image.FromFile(Server.MapPath("~/test.png"))) 
     using (var g = Graphics.FromImage(img)) 
     { 
      // Use the Graphics object to modify it 
      g.DrawLine(new Pen(Color.Red), new Point(0, 0), new Point(50, 50)); 
      g.DrawString("Hello World", 
       new Font(FontFamily.GenericSerif, 20), 
       new Pen(Color.Red, 2).Brush, 
       new PointF(10, 10) 
      ); 

      // Write the resulting image to the response stream 
      using (var stream = new MemoryStream()) 
      { 
       img.Save(stream, ImageFormat.Png); 
       return File(stream.ToArray(), "image/png"); 
      } 
     } 
    } 
} 

Et puis il suffit d'inclure cette image dans la vue:

<img src="<%= Url.Action("myimage", "home") %>" alt="my image" /> 
+0

Salut Darin - juste pour dire que je ne suis pas vous ignorer. Je n'ai pas encore eu le temps de tester ton code. Dès que je le fais (et en supposant que cela fonctionne), je vais le marquer comme la réponse. Merci pour votre temps. Sniffer – Sniffer

+0

J'utilise MVC 5 et le code comme montré n'a pas fonctionné pour moi. J'ai trouvé un post [link] (http://pawelrychlicki.pl/Home/Details/43/mvc-return-image-dynamically-drawn-in-controller-mvc-3) qui a résolu le problème. Ajoutez simplement stream.Position = 0; après la ligne img.Save. J'espère que ça aide quelqu'un. – user2789697

0

Cela a fonctionné pour moi.

using System.Web.Helpers; 
public class HomeController : Controller 
{ 
    public FileContentResult ImageOutput() 
    { 

     WebImage img = new WebImage("C:\\temp\\blank.jpg")); 

     //Do whatever you want with the image using the WebImage class 

     return new FileContentResult(img.GetBytes(), string.Format("image/{0}",img.ImageFormat)); 
    } 
} 

Pour l'utiliser juste faire la même chose que Darin dit

<img src="<%= Url.Action("ImageOutput", "home") %>" alt="my image" />