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

Nic*_*eer 6 asp.net-4.6 asp.net-core

如何获取上传图像的文件流(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?
    }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*eer 7

您可以使用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); 
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用newImage保存或执行任何操作.

  • 您应该看看这个项目(https://github.com/JimBobSquarePants/ImageProcessor),它目前正在为ASP.NET Core支持进行更新.它具有相当好的牵引力,我相信它是目前问题的唯一解决方案.我们在多个.NET站点中使用它. (3认同)
  • 如果它针对完整框架而不仅仅是核心,这将起作用。我可能是错的,但我认为目前还没有办法在核心中操纵图像。http://www.hanselman.com/blog/RFCServersideImageAndGraphicsProcessingWithNETCoreAndASPNET5.aspx(对我来说缺少足够的东西,我出于这样的原因瞄准了4.6库)。 (2认同)

小智 6

从 nuget 安装:Install-Package SixLabors.ImageSharp

[HttpPost]
public IActionResult Upload(IFormFile file)
{
    //Better use extension method
    string fileName;
    string customRoot = "wwwroot\\Upload\\";
    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();
}
Run Code Online (Sandbox Code Playgroud)

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