0

サーバーにローカルに保存されている画像のサムネイルを表示する必要があるプロジェクトがあります。最初は、jqueryライブラリを使用して、ビューの元の画像を「サム化」してみました。しかし、後で私は、この方法で潜在的に数千の画像を提供すると、実際に帯域幅を占有することに気付きました。したがって、以下は代わりにウィンドウのサムネイルを抽出する方法です(そして、1つのフルタイム画像のみがオンデマンドで提供されます)。

ただし、問題は、サムネイルがモデルの変数内にあることです。RazorView内に実際に画像を表示する方法がわかりません。では、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

新しいサイズで新しいファイルを作成し、それを 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 に答える
0

画像を数えて、ソースとしてアクションを持つループでタグを生成します

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

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


}

アクションでは、ファイルを送り返す必要があります。これを例として参照してください

これは画像に読み込まれます

于 2012-12-07T17:31:17.083 に答える