2016-09-30 92 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

這樣做的意義何在? (從drawable到外部應對) – Selvin

+0

@selvin可能會出現這種情況,您想要將所有可繪製的PNG放在用戶文件夾中,以便用戶可以在其他某些應用程序中使用這些PNG ... :) –

回答

0

您想嚴格遵守PNG嗎? Bitmap.compressFormat.JPEG將能夠壓縮更多。

減少PNG文件大小的唯一方法是降低PNG圖像尺寸更小的東西。我不認爲這是純粹的Android的直接,但有圖像庫,你可以用它來做到這一點。

您還可以通過創建一個新的位圖對象,並從原來的使用的getPixels(...)手動閱讀,pocessing他們縮減,並寫入新的一個把它寫自己。但我不會建議,調整大小可能會非常棘手,以便正確使用抗鋸齒功能。

1

1)如果您的PNG是預先定義的,你可以使用tiny png服務有非常小的PNG圖像。該服務正在減少約60%的png大小,沒有任何明顯的變化。 2)如果您的pngs在運行時創建/獲取,請嘗試使用Bitmap.createScaledBitmap()方法。用這種方法你可以創建小尺寸的PNG。

在該方法

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

100 PNG的情況下被忽略。因爲它是無損的。相反,你可以使用

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

這一個會給你體積小,壓縮速度更快。

1

我知道這是老了,但我依然會回答任何未來的求職者。
Android的位圖類在壓縮PNG方面相當有限。它只創建有限優化的PNG-32。 aapt程序,包裝您的apk文件,確實優化了PNG文件。因此,當你解壓並將你的PNG文件讀入位圖,然後用位圖類壓縮它時,你會得到一個更大的文件。
您可以使用pngj庫,它支持更好的壓縮PNG文件。
但是,根據您的描述,你似乎沒有在應用程序編輯的文件,您剛剛從資源複製到卡上,因此,所有你需要做的是包括在raw文件夾中的PNG文件,並檢索流通過撥打openRawResource()並直接複製到卡上。在將其包含在您的應用中之前,您可以使用TinyPNG進一步優化原始PNG文件。

相關問題