Изменение размера изображения при загрузке в Asp Core - PullRequest
3 голосов
/ 16 мая 2019

Мне нужно изменить размер фотографии и сохранить ее на новый размер, когда пользователь выбирает фотографию для загрузки перед сохранением фотографии.

Я использую этот код, но он не сохраняется с новым размером. в чем проблема ?

public async Task<IActionResult> UploadNewsPic()
    {
        var file = Request.Form.Files[0];
        try
        {
            if (file.Length > 0)
            {
                string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                string fullPath = Path.Combine(_applicationRoot.UploadNewPath(), file.Name);
                using (var stream = new FileStream(fullPath, FileMode.Create))
                {
                    if (file.IsImage())
                    {
                        await file.ResizeImage(3, 3);
                        file.CopyTo(stream);
                    }
                }
            }
            return Ok();
        }
        catch (Exception e)
        {
            return BadRequest();
        }
    }

и это расширение размера:

 public async static Task<Image> ResizeImage(this IFormFile file, int width, int height)
    {
        using (var memoryStream = new MemoryStream())
        {
            await file.CopyToAsync(memoryStream);
            using (var img = Image.FromStream(memoryStream))
            {
                return img.Resize(width, height);
            }
        }
    }

    public static Image Resize(this Image image, int width, int height)
    {
        var res = new Bitmap(width, height);
        using (var graphic = Graphics.FromImage(res))
        {
            graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphic.SmoothingMode = SmoothingMode.HighQuality;
            graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphic.CompositingQuality = CompositingQuality.HighQuality;
            graphic.DrawImage(image, 0, 0, width, height);
        }
        return res;
    }

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Вам нужно сохранить результат из ResizeImage в поток. Сейчас вы просто копируете оригинальный файл.

var img = await file.ResizeImage(3, 3);
img.Save(stream, SomeFormat);
2 голосов
/ 16 мая 2019

Ваша функция ResizeImage() возвращает изображение с измененным размером, оно не редактирует само изображение, поэтому вы должны установить его в переменную.

if (file.IsImage())
{
    Image imageResized = await file.ResizeImage(3, 3);
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...