Я хочу сохранить существующее изображение в формате PNG или JPG с заданным размером файла, например, 100 КБ.
Как сохранить изображение в формате PNG или JPG с заданным размером выходного файла? (предпочтительно в C#)
Ответы (3)
PNG использует сжатие без потерь, поэтому вы не можете сжать его ниже определенного уровня.
В .NET вы можете сохранить JPG со сжатием и угадать, насколько большим будет файл после завершения.
http://msdn.microsoft.com/en-us/library/system.drawing.image.save(VS.80).aspx — см. раздел «Сохранение изображения JPEG со степенью сжатия».
Кроме того, вы можете изменить размер изображения, чтобы сделать его меньше.
Только при использовании JPG 2000 вы можете установить размер файла на определенное значение. Используя JPG, вам придется попробовать разные значения качества, а использование PNG даст вам один размер для данного изображения и уровень сжатия — вы можете только попытаться изменить размер изображения, что даст вам меньший размер.
Вы также можете попытаться изменить размер изображения, чтобы несжатое изображение имело нужный вам размер, но тогда PNG и особенно JPG часто будут иметь гораздо меньший размер файла.
Для PNG на самом деле нет настройки качества, поэтому вы не можете контролировать размер файла.
Jpg имеет настройку качества, которая определяет, насколько хорошего качества будет изображение. более низкие настройки качества приводят к уменьшению размера файлов. Однако обычно нет опции «дать качество, необходимое для файла размера x».
Вы можете добиться того же результата, используя довольно неэффективный подход преобразования в jpg в памяти, наблюдая, насколько велик результат, регулируя качество вверх или вниз и повторяя, пока не подойдете достаточно близко. Это может звучать ужасно, но если ваши изображения не слишком большие, вы можете обнаружить, что никто не заметит короткую задержку, пока вы это делаете.