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

时间:2016-01-27 02:41:18

标签: asp.net-core asp.net-4.6

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

3 个答案:

答案 0 :(得分: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); 
}

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

答案 1 :(得分: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/

答案 2 :(得分:0)

非常有帮助。非常感谢。这方面使我摆脱了内存不足的异常。我想做出贡献,如果您使用的是IFormFile接口,则“文件”在代码中引用您的IFormFile。

这是我实体的IFormFile属性

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

这就是我的使用方式

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