2016-09-30 3 views
2

as bm.compress(Bitmap.CompressFormat.PNG, 50, out); //here 50 will not work as PNG is losslessесть ли способ уменьшить размер PNG?

как уменьшить .png размер изображения? также просто справляется с внешним расположением с помощью увеличения размера файла размера файла на 5-10 раз?

Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); 

String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 

File file = new File(extStorageDirectory, "ic_launcher.PNG"); 
outStream = new FileOutputStream(file); 
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
outStream.flush(); 
outStream.close(); 
+0

Что это за точка? (копирование с выворачиваемого на внешний) – Selvin

+0

@selvin может быть случай, когда вы хотите поместить все выпрямляемые PNG в папку пользователя, чтобы пользователь мог использовать их в некоторых других приложениях ... :) –

ответ

0

Вы хотите придерживаться строго PNG? Bitmap.compressFormat.JPEG сможет сжимать намного больше.

Единственный способ уменьшить размер PNG-файла - уменьшить размеры изображения PNG до меньшего размера. Я не думаю, что это прямо с чистым Android, но есть библиотеки изображений, которые вы можете использовать для этого.

Вы также можете написать это самостоятельно, создав новый объект Bitmap и вручную прочитав оригинал с помощью getPixels (...), переведя их в нижнее положение и создав новый. Но я бы не рекомендовал, что изменение размера может быть сложным, чтобы нормально работать с сглаживанием.

1

1) Если ваши параметры предварительно определены, вы можете использовать услугу tiny png, чтобы иметь очень маленькие png. Услуга уменьшает размер png около 60 процентов без каких-либо заметных изменений. 2) Если ваши png создаются/получаются во время выполнения, попробуйте использовать метод Bitmap.createScaledBitmap(). С помощью этого метода вы можете создавать небольшие размеры png.

В методе

bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);

100 игнорируется в случае PNG. Потому что это без потерь. Вместо этого вы можете использовать

bm.compress(Bitmap.CompressFormat.JPEG, 80, outStream); 

Этот номер даст вам небольшой размер и быстрее сжимается.

1

Я знаю, что это старо, но я все равно буду отвечать за будущих искателей.
Класс Bitmap для Android довольно ограничен в сжатии PNG. Он создает только PNG-32 с ограниченной оптимизацией. Программа aapt, которая упаковывает ваш файл apk, оптимизирует PNG-файл. Поэтому, когда вы раскалываете и читаете свой PNG-файл в растровое изображение, а затем сжимаете его с помощью класса растрового изображения, вы получаете гораздо больший файл.
. Вы можете использовать библиотеку pngj, которая поддерживает намного лучшее сжатие файлов PNG.
Но, основываясь на вашем описании, вы, кажется, не редактируете файлы в приложении, вы просто копируете их из ресурсов на карту, поэтому все, что вам нужно сделать, это включить PNG-файл в папку raw и получить поток к нему, позвонив openRawResource() и скопировав его непосредственно на карточку. Вы можете дополнительно оптимизировать исходный файл PNG, используя TinyPNG, прежде чем включать его в свое приложение.

Смежные вопросы