0

我有一个项目,我需要在其中显示本地存储在服务器上的图像缩略图。起初,我尝试使用 jquery 库为我的视图“缩略图”原始图像。但是,后来我意识到以这种方式提供可能成千上万的图像会真正占用带宽。所以下面是一种提取窗口缩略图的方法(并且只有一个完整的时间图像将按需提供)。

但问题是,缩略图现在位于模型的变量中。我不知道如何在 Razor 视图中实际显示图像。那么如何在视图中显示 System.Drawing.Icon 项?

public static System.Drawing.Icon GetThumbnailImages(string imageFilePath) 
        {
            ShellFile shellFile = ShellFile.FromFilePath(imageFilePath);
            Bitmap shellThumb = shellFile.Thumbnail.ExtraLargeBitmap;
            System.Drawing.Icon shellThumb2 = shellFile.Thumbnail.Icon;
            //var shellThumb3 = shellFile.Thumbnail.MediumIcon;
            return shellThumb2;

        }
4

2 回答 2

0

我会计算图像并在循环中生成标签,该标签以动作为源

for(int i= 0; i< MyModel.ImageCount(); i++){

     <img src="@Url.Action("GetImage", "Home")" />


}

您的操作将需要发回文件。以这个为例

这将加载到图像中

于 2012-12-07T17:31:17.083 回答
0

我建议您使用新尺寸创建一个新文件,然后通过 url 显示它。你可以使用类似的东西:

public static string GenerateThumbnail(string filename, string target, int width)
{
    var img = Image.FromFile(filename);

    if (img.Width > width)
    {
        var bitmap = new Bitmap(width, GetTargetHeight(img.Width, width, img.Height));
        var g = Graphics.FromImage(bitmap);

        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(img, 0, 0, width, GetTargetHeight(img.Width, width, img.Height));
        g.Dispose();

        using (Stream file = File.OpenWrite(target))
        {
            CopyStream(bitmap.ToStream(ImageFormat.Jpeg), target);
        }

        return target;
    }

    return filename;
}

private static int GetTargetHeight(int originalWidth, int targetWidth, int originalHeight)
{
    return Convert.ToInt32(decimal.Round((decimal)targetWidth / originalWidth * originalHeight, 0));
}

然后使用

<img src="@GenerateThumbnail("path", "targetFile", 100)" />
于 2012-12-07T17:49:18.857 回答