7

如何获取上传图片的文件流(IFormFile)并调整大小?

public ActionResult Upload(IFormFile file)
{
    using (var reader = new StreamReader(file.OpenReadStream()))
    {
        var fileContent = reader.ReadToEnd();
        var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition);

        //scale image here?
    }
}
4

3 回答 3

9

您可以使用IFormFile.OpenReadStream()获取流,然后只需将流插入Image. 对于这个例子,我将它缩放到 1024x768。

Image image = Image.FromStream(file.OpenReadStream(), true, true);
var newImage = new Bitmap(1024, 768);
using (var g = Graphics.FromImage(newImage))
{
    g.DrawImage(image , 0, 0, 1024, 768); 
}

然后,您可以使用它newImage来保存或做任何您想做的事情。

于 2016-01-27T02:41:18.043 回答
2

从 nuget 安装:安装包 SixLabors.ImageSharp

[HttpPost]
public IActionResult Upload(IFormFile file)
{
 //Better use extension method
 string fileName;
 string customRoot = "wwwroot\\Upload\\";
 if (!Directory.Exists(customRoot))
    {
       Directory.CreateDirectory(customRoot);
    }
    var path = Path.Combine(Directory.GetCurrentDirectory(), customRoot,fileName);
    using var image = Image.Load(file.OpenReadStream());
    //100: height
    //100: width
    image.Mutate(x => x.Resize(100, 100));
    image.Save(path); 
    return Ok();
}

欲了解更多信息: https ://blog.elmah.io/upload-and-resize-an-image-with-asp-net-core-and-imagesharp/

于 2021-01-06T15:31:53.733 回答
0

非常有帮助。太感谢了。这方面使我免于内存不足的异常。我想做出贡献,如果您使用的是 IFormFile 接口,那么“文件”是指代码中的您的 IFormFile。

这是我的实体的 IFormFile 属性

[NotMapped]
public IFormFile MyImage1 { set; get; }

这就是我使用它的方式

Image image = Image.FromStream(model.MyImage1.OpenReadStream(), true, true);
于 2019-09-25T11:57:43.170 回答