ASP.NET 核心图片上传和调整大小

ASP.NET Core Image Upload and Resize

如何获取上传图片 (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?
    }
}

您可以使用 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 来保存或做任何您想做的事情。

很有帮助。太感谢了。这方面让我免于内存不足exception.I想建功立业,如果你使用的是IFormFile接口,那么"file"在代码中引用你的IFormFile。

这是我的实体

的 IFormFile 属性
[NotMapped]
public IFormFile MyImage1 { set; get; }

这就是我的使用方式

Image image = Image.FromStream(model.MyImage1.OpenReadStream(), true, true);

从 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/