5

在我的 ASP.Net MVC 4 应用程序中,我有一个视图,允许用户将鼠标悬停在图像上以获得全尺寸预览。它运作良好。

目前,我将用户悬停的图像设置为 50 和 50 的静态宽度和高度,如下所示:

<img id="@Model.Value" class="image-preview" height="50" width="50" src="@Model.ImageString" />

@Model.ImageString是由此操作创建的值:

[HttpGet]
public string GetImageUrl(Guid fileId)
{
    var file = db.FetchedFiles
        .First(ff => ff.ID == fileId);

    return "data:image/*;base64," + Convert.ToBase64String(file.Data);
}

上面的 Action 是我想修改的。如何Convert.ToBase64String(file.Data)以与原始文件相同的比例将其输出为缩略图?

提前致谢!

4

2 回答 2

9

我在网上找到了一个例子,但我不记得具体在哪里。我猜这是一个常见的解决方案。

这是我的选择:

internal static string resizeImage(byte[] data){
    using (var ms = new MemoryStream(data))
    {
        var image = Image.FromStream(ms);

        var ratioX = (double)150 / image.Width;
        var ratioY = (double)50 / image.Height;
        var ratio = Math.Min(ratioX, ratioY);

        var width = (int)(image.Width * ratio);
        var height = (int)(image.Height * ratio);

        var newImage = new Bitmap(width, height);
        Graphics.FromImage(newImage).DrawImage(image, 0, 0, width, height);
        Bitmap bmp = new Bitmap(newImage);

        ImageConverter converter = new ImageConverter();

        data = (byte[])converter.ConvertTo(bmp, typeof(byte[]));

        return "data:image/*;base64," + Convert.ToBase64String(data);
    }
}
于 2013-08-27T00:31:46.903 回答
0

您将需要返回已在服务器上调整大小的新图像。

到目前为止,最简单的方法是使用ImageResizing并简单地传递文件流以及ResizeSettings指定您想要的尺寸。然后只需将调整大小的文件返回为base64.

该库非常广泛,并且包含大量示例,因此您应该能够找到解决方案或对其进行调整以满足您的需求。

这是一个例子:http: //imageresizing.net/docs/howto/upload-and-resize

于 2013-08-15T17:42:15.480 回答