.Net MVC сжимает изображение после изменения размера - PullRequest
0 голосов
/ 08 октября 2019

Я создал функцию изменения размера изображения, которая является частью класса Utilities в моем приложении. Функция делает то, что предназначено и изменяет размер файла. Однако размер нового файла больше. Пример: я загрузил изображение 1920x1080 размером 144 КБ. Новое изображение было 1500x816, что идеально, но это было 422 КБ, что побеждает цель изменения размера. Текущая функция выглядит следующим образом:

public static void SaveAndResizeImg(string imageFile, string outputFile, int maxWidth = 1500, int maxHeight = 1500)
{
    using (var srcImage = Image.FromFile(imageFile))
    {
        System.Drawing.Imaging.ImageFormat format;
        if (outputFile.IndexOf(".png", StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            format = System.Drawing.Imaging.ImageFormat.Png;
        }
        else if (outputFile.IndexOf(".jpeg", StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            format = System.Drawing.Imaging.ImageFormat.Jpeg;
        }
        else if (outputFile.IndexOf(".jpg", StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            format = System.Drawing.Imaging.ImageFormat.Jpeg;
        }
        else if (outputFile.IndexOf(".gif", StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            format = System.Drawing.Imaging.ImageFormat.Gif;
        }
        else if (outputFile.IndexOf(".tif", StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            format = System.Drawing.Imaging.ImageFormat.Tiff;
        }
        else
        {
            format = System.Drawing.Imaging.ImageFormat.Bmp;
        }
        int newWidth, newHeight;
        if (srcImage.Width > maxWidth && srcImage.Width > srcImage.Height)
        {
            newWidth = maxWidth;
            newHeight = (int)Math.Ceiling(srcImage.Height * ((decimal)maxWidth / srcImage.Width));
        }
        else if (srcImage.Height > maxHeight && srcImage.Height > srcImage.Width)
        {
            newHeight = maxHeight;
            newWidth = (int)Math.Ceiling(srcImage.Width * ((decimal)maxHeight / srcImage.Height));
        }
        else
        {
            newHeight = srcImage.Height;
            newWidth = srcImage.Width;
        }
        using (var newImage = new Bitmap(newWidth, newHeight))
        {
            using (var graphics = Graphics.FromImage(newImage))
            {
                graphics.SmoothingMode = SmoothingMode.AntiAlias;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
                newImage.Save(outputFile, format);
            }
        }                
    }
}

Я думал передать кодировку и параметр кодирования в функцию сохранения. Код сжатия, кажется, принимает параметр enum, но единственное перечисление, которое я видел, казалось, было связано с сжатием tiff. Я хочу иметь возможность сжимать изображения любого типа.

...