Android кодировать изображение с максимальным ограничением размера - PullRequest
4 голосов
/ 14 февраля 2011

Мне нужно закодировать изображение в формате JPEG, а максимальный размер файла - 300 К и отправить его в виде байтового массива.Я делаю кодировку:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
image = baos.toByteArray();

Вы знаете, как ограничить размер файла до 300 КБ?возможно, решение состоит в том, чтобы сделать качество изображения ниже, но иногда (когда изображение меньше), мне это может не понадобиться.Спасибо

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Путем многократного сжатия с понижающимися значениями «качества» до получающегося в результате байта [] длиной <= 300 КБ.Здесь нет быстрого доступа (AFAIK), но вы можете тщательно выбирать значения качества и ограничивать себя, скажем, максимум 4 компрессиями. </p>

2 голосов
/ 14 февраля 2011

Быстрый ответ - использовать пробное и тестовое решение, чтобы найти значение сжатия, которое дает значение, близкое к 300К.

Размеры файлов в формате JPEG сильно зависят от детализации изображения, поэтому, если ваши изображения не будут иметь одинаковую детализацию (не все черные изображения и т. Д.), Наилучший коэффициент сжатия будет отличаться.

Может быть, использовать алгоритм стиля двоичного поиска, чтобы найти хорошее решение?Начните с 50, затем, если он слишком большой, опуститесь до 25, в противном случае - до 75. Затем, когда вы в пределах 270–300, просто остановитесь?

...