Как изменить размер изображения до определенного размера?

Я хотел бы изменить размер изображения до определенного размера файла. Например, не более 200 КБ. Каков наилучший подход для достижения этого с помощью С#.NET?

Спасибо!

Ответы

Ответ 1

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

Ответ 3

Вы можете сделать довольно много с Drawing.Image, чтобы изменить размер изображения.

Есть много вопросов о том, как это сделать. Вот один.

С точки зрения размера - вы не будете знать, какой размер до завершения операции изменения размера. Единственный способ быть уверенным в том, чтобы изменить размер, проверить результат, и если он слишком большой, попробуйте изменить размер с более низким качеством. Повторяйте до конца.

Вы можете приблизиться к размеру, если знаете размеры и глубину цвета, как описано в ответах на этот (идентичный?) вопрос.

Ответ 4

Если это не очень важная функция, пробная версия и ошибка работают достаточно хорошо. Предположим, что если вам нужно сжать ввод до N * 100%, сделайте это, масштабируя оба измерения с помощью sqrt(N) * 100%.

Если это важно, вам нужно лучше понять технологии сжатия изображений. Я возьму JPG. Это формат изображения, который обеспечивает потерю сжатия, разбивая изображение на 8x8 пиксельных блоков, DFT преобразует их, отбрасывает небольшие коэффициенты и затем сжимает результирующий поток битов.

Теперь следует, что вы можете немного поиграть с уровнем качества, сколько из небольших коэффициентов вы выбрасываете. Для этого вам не нужно повторять (дорогой) ДПФ. Поэтому, если файл заканчивается чуть слишком большим, вы можете выбросить еще несколько коэффициентов и повторно сжать. И если вы были слегка агрессивны, то верните несколько коэффициентов и снова сжимайте. Все это довольно быстро.

Ответ 5

Грубая оценка такова:

size(KB) = (width * height * bitdepth) / (8 * 1024)

Размер файла завышен немного больше из-за информации о файле (информация о сжатии и т.д.).