Сжать файл изображения с помощью ImageSharp - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужно уменьшить каждое полученное изображение размером более 10 МБ. Типы файлов: png, jpg и gif. Я видел, что ImageSharp имеет такую ​​опцию, чтобы уменьшить размер файла:

Resize(new ResizeOptions
{
    Mode = ResizeMode.Max,
    Size = new Size(maxFileSize)
}

Я видел много примеров использования функции изменения размера по ширине и высоте, но ни один из них не использовал эту опцию одного размера, и никакая документация не объясняет точно, что «размер» означает.

Я пробовал следующее: уменьшенное изображение размером 22,2 МБ с использованием maxFileSize = 1024 позволило получить изображение из 527,9 того же изображения «Уменьшить» с maxFileSize = 1024 * 2 * 10 и получить изображение размером 47,4 МБ.

Как я могу уменьшить изображение примерно до 10 МБ (может быть немного меньше)? Моя цель здесь - ограничить до 10 МБ, а при превышении уменьшить изображение до максимально возможного размера менее 10 МБ, не влияя на соотношение.

1 Ответ

0 голосов
/ 16 февраля 2020

Посмотрев еще немного в документации, я теперь вижу, что единственный int-конструктор просто вставляет одно и то же число в ширину и высоту.

Пока я сокращаю изображение до такой степени, используя следующее:

            using (var image = Image.Load(imageFile))
            {
                var proportion = (double)imageFile.Length / maxFileSize;
                var maxWidth = (int)(image.Width / proportion);
                var maxHeight = (int)(image.Height / proportion);
                image.Mutate(x => x
                    .Resize(new ResizeOptions
                    {
                        Mode = ResizeMode.Max,
                        Size = new Size(maxWidth, maxHeight)
                    }));
                // Save the Image
            }

Если у кого-то есть идея получше, я бы хотел ее услышать.

Цель состоит в том, чтобы уменьшить изображение до 10 МБ (как можно ближе).

...