Bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut), делая размер изображения больше оригинального - программирование
Подтвердить что ты не робот

Bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut), делая размер изображения больше оригинального

Я хочу сжать изображение, взятое из камеры, в формат png, чтобы сделать их меньшими по размеру, поэтому я использую этот код:

compressedPictureFile = new File(imagePath);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
FileOutputStream fOut = new FileOutputStream(compressedPictureFile);
boolean compressed = bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut);
fOut.flush();
fOut.close();

Проблема в том, что compressionPictureFile на самом деле больше, чем исходное изображение (от 1 Mb до 6Mb)

Что мне не хватает? И это лучший способ уменьшить размер изображения?

Спасибо

4b9b3361

Ответ 1

Изображения, сделанные с помощью камеры, скорее всего хранятся в jpg -format, который является потерянным, но относительно хорош для изображений с большим количеством цветов (например, фотографий).

Когда вы сжимаете растровое изображение, используя свой метод, вы сохраняете его как png. Сжатие png без потерь, но может достигать довольно маленьких файлов, когда есть несколько цветов (например, в некоторых логотипах или другой графике). Когда количество цветов и сложности в png файле увеличивается, размер файла (поэтому камера сохраняет jpg - соотношение качества/размера файла намного лучше, чем png для большинства фотографий).

Итак, если вы хотите уменьшить размер файлов, используйте сжатие jpg и поэкспериментируйте с параметром качества. Вы также можете уменьшить разрешение изображений, так как это позволит сэкономить много места (файл с 50% разрешением будет составлять около 25% в размере данных).