Bitmap.Comp () в android. Качество = 100 дает изображение большего размера, чем исходное изображение.

Я использую метод compress() Bitmap для сжатия изображений с помощью следующего кода:

ByteArrayOutputStream baos;
Bitmap img = BitmapFactory.decodeFile(imgs[i].getAbsolutePath());
img.compress(Bitmap.CompressFormat.JPEG, compFactor, baos);
byte[] compImgBytes;
compImgBytes = baos.toByteArray();
OutputStream out1 = new BufferedOutputStream(new FileOutputStream(
        new File(dir.getString("dir", null) + File.separator +
        String.valueOf(imgsName) + ".jpg")));
out1.write(compImgBytes);

Проблема в том, что когда я использую 100 в качестве коэффициента сжатия (compFactor = 100) для этого кода, размер результирующего изображения больше, чем размер сжимаемого изображения. Все, что я пытался сделать, это сжать изображение с максимальным качеством в соответствии с документацией Android для класса Bitmap.

Почему размер результирующего изображения больше размера исходного изображения? Я что-то упускаю?


person Rishab Jaiswal    schedule 06.11.2015    source источник
comment
Исходное изображение уже было сжато, так как, AFAIK, единственные форматы файлов, с которыми работает Android, - это сжатые (PNG, JPEG). В зависимости от формата файла и рейтинга качества исходного изображения вполне разумно, что JPEG с качеством 100 будет больше.   -  person CommonsWare    schedule 06.11.2015


Ответы (1)


Передача 100 для качества означает:

100 означает сжатие для максимального качества

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

person Buddy    schedule 06.11.2015
comment
Поскольку JPEG - это сжатый формат, значит, необработанные байты, о которых вы говорите, относятся к несжатому изображению? - person Rishab Jaiswal; 06.11.2015
comment
Ага. Вы вызываете decodeFile, который распаковывает изображение в памяти. Затем compress берет байты в памяти и сжимает их. - person Buddy; 06.11.2015
comment
Спасибо за руководство @Buddy! Это было действительно полезно! - person Rishab Jaiswal; 07.11.2015