Я бы порекомендовал вам написать собственный результат действия, чтобы не загрязнять действие вашего контроллера совершенно бесполезным и скучным кодом инфраструктуры GDI +:
public class ImageResult : ActionResult
{
private readonly string _agha;
public ImageResult(string agha)
{
_agha = agha;
}
public override void ExecuteResult(ControllerContext context)
{
Color BackColor = Color.White;
String FontName = "Times New Roman";
int FontSize = 25;
int Height = 50;
int Width = 700;
using (Bitmap bitmap = new Bitmap(Width, Height))
using (Graphics graphics = Graphics.FromImage(bitmap))
{
Color color = Color.Gray;
Font font = new Font(FontName, FontSize);
SolidBrush BrushBackColor = new SolidBrush(BackColor);
Pen BorderPen = new Pen(color);
Rectangle displayRectangle = new Rectangle(new Point(0, 0), new Size(Width - 1, Height - 1));
graphics.FillRectangle(BrushBackColor, displayRectangle);
graphics.DrawRectangle(BorderPen, displayRectangle);
graphics.DrawString(_agha, font, Brushes.Red, 0, 0);
context.HttpContext.Response.ContentType = "image/jpg";
bitmap.Save(context.HttpContext.Response.OutputStream, ImageFormat.Jpeg);
}
}
}
, а затем просто определите действие контроллера, которое будет возвращать этот результат пользовательского действия:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Image(string agha)
{
return new ImageResult(agha);
}
}
и из некоторого представления (~/Views/Home/Index.cshtml
в моем примере) вы можете сослаться на действие, которое будет динамически генерировать для вас изображение:
<img src="@Url.Action("Image", new { agha = "foo bar" })" alt="" />
Еще одна возможность, если вы не хотите создавать дополнительное действие для построения изображения, - это использовать схему URI данных , которая в основном позволяет встроить изображение в виде данных Base64 непосредственно в HTML. Одно предостережение в том, что не все браузеры поддерживают его, и, кроме того, он делает ваши HTML-страницы намного больше.