Динамические изображения в MVC (сайты Stack Exchange Beta) - PullRequest
8 голосов
/ 11 июля 2010

Я просматривал сайты Stack Exchange Beta и заметил, что на каждом сайте, входящем в бета-версию, вверху есть изображение, например, со словами «бета-версия веб-приложений» или «игровая бета-версия».* Я задавался вопросом, создаются ли эти изображения индивидуально или как-то динамически?Есть ли способ использовать MVC.NET для создания PNG на лету?

Если ответ слишком сложен для этого форума, кто-нибудь может указать мне какие-нибудь статьи, которые помогут?

Заранее спасибо

Sniffer

Ответы [ 2 ]

15 голосов
/ 12 июля 2010

Да, есть способ динамически генерировать и обслуживать изображения с помощью ASP.NET MVC.Вот пример:

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");
            }
        }
    }
}

А затем просто включите это изображение в представление:

<img src="<%= Url.Action("myimage", "home") %>" alt="my image" />
1 голос
/ 31 января 2016

Это сработало для меня.

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));
    }
}

Чтобы использовать это, сделайте то же самое, что сказал Дарин

<img src="<%= Url.Action("ImageOutput", "home") %>" alt="my image" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...