1

我正在使用一个 javascript 框架,它只能绘制简单的图形对象或获取图像文件的 url。我需要更复杂的图形,但组合太多,无法创建所有不同的可能图像。是否可以在服务器上拦截文件请求并在其位置返回动态创建的内容(png 图像)?

4

1 回答 1

2

当然,您可以让控制器操作返回图像文件。这是我编写的将文本写入图像并将其返回的示例。

请注意,您可能想要使用OutputCache和使用VaryByParam,以便输出缓存知道应该考虑哪些查询字符串参数来确定请求是否针对已经生成的图像。

[OutputCache(Duration=86400, VaryByParam="text;maxWidth;maxHeight")]
public ActionResult RotatedImage(string text, int? maxWidth, int? maxHeight)
{
    SizeF textSize = text.MeasureString(textFont);

    int width = (maxWidth.HasValue ? Math.Min(maxWidth.Value, (int)textSize.Width) : (int)textSize.Width);
    int height = (maxHeight.HasValue ? Math.Min(maxHeight.Value, (int)textSize.Height) : (int)textSize.Height);

    using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb))
    {
        using (Graphics g = Graphics.FromImage(bmp))
        {
            g.TextRenderingHint = TextRenderingHint.AntiAlias;
            g.DrawString(text, textFont, Brushes.Black, zeroPoint, StringFormat.GenericTypographic);

            bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);

            using (MemoryStream ms = new MemoryStream())
            {
                bmp.Save(ms, ImageFormat.Png);
                return File(ms.ToArray(), "image/png");
            }
        }
    }
}
于 2013-10-28T17:42:19.147 回答