Как изменить разрешение картинке в контроллере? ASP.NET Core

184
24 июля 2021, 13:30

В контроллер заходит файл-картинка. Сигнатура контроллера

[HttpPost("add-img/{IdSection}/{idArticle}")]
    public async Task<IActionResult> AddImageForArticle(List<IFormFile> file, string IdSection, string idArticle)

Все успешно заходит и сохраняет в базу. Только вот нужно изменить размер изображение и что не мало важно пропорционально. Т.е. изменить максимальную ширину(905px) и автоматом подогнать высоту. Может есть какие-то библиотеки?

Answer 1

Можно сделать следующим образом: открываем картинку как массив байт и там уже задаем новые размеры:

byte[] imageBytes;    
using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
    using (Image img = Image.FromStream(ms))
    {
        int h = 100;
        int w = 100;
        using (Bitmap b = new Bitmap(img, new Size(w,h)))
        {
            using (MemoryStream ms2 = new MemoryStream())
            {
                b.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg);
                imageBytes = ms2.ToArray();
            }
        }
    }                        
}  

Что бы изменять картинку пропорционально, достаточно подключит логику. К примеру была картинка 1920x1080, высчитываем сколько будет 1% от ширины: 1920 / 100 = 19,2. Теперь узнаем на сколько процентов уменьшилась ширина (1920 - 905) / 19,2 = 52,86% Значит уменьшим высоту на столько процентов: 1080 / 100 * 52,86 = 571. Вписываем эти размеры вместо int h и int w и все готово.

READ ALSO
Нормализация данных

Нормализация данных

Задача состоит в нормализации(0-1) стакана приказов в биржевой торговле

279
Отсутствуют права на запись

Отсутствуют права на запись

Использую laravel+nginxДопустим утром сделал chown -R 777 www-data /var/www/site

139
Как с помощью custom validator сделать проверку двух полей, password и confirmPassword?

Как с помощью custom validator сделать проверку двух полей, password и confirmPassword?

аргумент $value принимает значение только первого свойстваКак правильно применить это ко второму свойству?

177