ASP.NET Core Image Загрузить и изменить размер

Как вы получаете файл потока загруженного изображения (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 ответа

Решение

Ты можешь использовать 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 сохранить или делать все, что вы хотите с.

Установить из nuget:Install-Package 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/

Очень полезно. Огромное спасибо. Этот аспект спас меня от исключения нехватки памяти. Я хочу внести свой вклад, если вы используете интерфейс IFormFile, то "файл" относится к вашему IFormFile в коде.

Это свойство IFormFile моей сущности

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

И вот как я его использую

Image image = Image.FromStream(model.MyImage1.OpenReadStream(), true, true);
Другие вопросы по тегам