2015-11-06 2 views
0

Я использую compress() метод растрового изображения, чтобы сжать мои изображения с помощью следующего кода:Метод Bitmap.Comp() в android. Качество = 100 дает в размере изображения больше, чем исходное изображение

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.

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

+0

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

ответ

1

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

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

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

+0

Поскольку JPEG является сжатым форматом, поэтому необработанные байты, на которые вы ссылаетесь, имеют несжатое изображение? –

+0

Да. Вы вызываете 'decodeFile', который распаковывает изображение в памяти. Затем 'compress' берет байты в памяти и сжимает их. – Buddy

+0

Спасибо за руководство @Buddy! Это было действительно полезно! –