Member 13318210 Ответов: 3

Уменьшите изображение до заданного размера при загрузке в C#


У меня есть веб-приложение.Я хочу реализовать следующую функциональность, надеюсь, вы, ребята, поможете мне:

При загрузке файла изображения я хочу сделать Автоматически уменьшите размер фотографии до точных 2 МБ, если фотография имеет размер > 2 МБ Компромиссы с качеством изображения, высотой и шириной.

Как реализовать это ребята в c#, надеюсь, вы подробно разберетесь с образцом кода


заранее спасибо...

Что я уже пробовал:

я пробовал много, но не уменьшил до точных 2 Мб, уменьшил до непредсказуемого размера < 2 Мб

LLLLGGGG

я попробовал много, но не уменьшил до точных 2 мб, а также изменил ширину, высоту


Это потому, что это невозможно: вы не можете уменьшить размер файла и сохранить ширину, высоту и качество одинаковыми! Ты можешь:
1. Уменьшите ширину / высоту
2. измените алгоритм сжатия с потерями (не обязательно подразумевает потерю качества, но это означает, что вам нужно загрузить фотографию, даже если она > 2 МБ, и сохранить ее снова в новом типе изображения) или увеличьте объем сжатия, который использует алгоритм (уменьшается качество, и вам все равно нужно загрузить фотографию, даже если она >2 МБ)
3. Используйте сжатие без потерь после загрузки (например, алгоритм GZip).

3 Ответов

Рейтинг:
10

F-ES Sitecore

Вероятно, вам придется сохранить изображение в формате JPG и проверить размер файла, если он слишком большой, сохраните его снова с более высоким сжатием, проверьте размер и так далее. Код для изменения степени сжатия можно найти здесь

Как установить уровень сжатия JPEG | Microsoft Docs[^]

псевдокод будет выглядеть примерно так

quality = 100
save image at quality
do while image size > 2MB and quality > 10
    quality = quality - 10
    save image at quality
end do


Чтобы опередить ваш следующий вопрос, нет, я не буду писать его для вас, есть масса примеров того, как загружать изображения и сохранять их, и я показал вам код того, как сохранять их в заданном качестве, так что погуглите эти образцы, поймите их, а затем соберите вместе.


Рейтинг:
1

Patrice T

Цитата:
Я хочу сделать автоматическое уменьшение размера фотографии до точных 2 МБ, если фотография составляет > 2 МБ без изменения ширины,высоты и качества.

Это просто невозможно. ширина, высота, качество и размер изображения связаны, вы не можете изменить одно, не изменив другое.
Цитата:
При загрузке файла изображения,

Вы ничего не делаете во время загрузки изображения. Вам нужно дождаться окончания загрузки.
Цитата:
Автоматически уменьшите размер фотографии до точных 2 МБ

Точного размера добиться практически невозможно.


Рейтинг:
0

OriginalGriff

Вы не можете, по двум причинам.
1) Вы не можете изменить файл во время или до его загрузки - код C# работает только на сервере, а не на клиенте, - и сервер не имеет доступа к данным до завершения загрузки.
2) Если вы всегда можете сделать изображение меньше, не влияя на высоту, ширину или качество, не думаете ли вы, что исходное изображение уже сделал бы это? Вы можете уменьшить размер изображения, изменив формат, в котором вы его храните, при условии, что вы используете формат сжатия без потерь (например, PNG, JPG), но нет никакой гарантии, что он станет меньше (он может даже стать больше для некоторых изображений) и абсолютно никакой гарантии, что результирующий размер изображения будет иметь какое-либо конкретное значение.


Member 13318210

хорошо...я иду на компромисс с качеством изображения.Есть ли вообще возможность уменьшить размер за счет изменения разрешения?? если да, то не могли бы Вы уточнить пример кода

Заранее спасибо