我有一个项目,我需要在服务器上显示本地存储的图像缩略图。起初我尝试使用jquery库来“缩放”原始图像以供我查看。然而,后来我意识到以这种方式服务可能成千上万的图像将真正占用带宽。因此,下面是一种提取窗口缩略图的方法(并且只按需提供一个全时图像)。
问题是,缩略图现在位于模型中的变量中。我不知道如何在Razor View中显示图像。那么如何在视图中显示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;
}
答案 0 :(得分:0)
我会计算图像并在循环中生成标记,其中有一个动作作为其源
for(int i= 0; i< MyModel.ImageCount(); i++){
<img src="@Url.Action("GetImage", "Home")" />
}
您的操作需要重新发送文件。请将此作为示例Overflow
这将加载图像
答案 1 :(得分:0)
我建议您使用新尺寸创建一个新文件,然后按网址显示。 你可以使用类似的东西:
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)" />