2016-09-30 4 views
2

として bm.compress(Bitmap.CompressFormat.PNG, 50, out); //here 50 will not work as PNG is losslessPNGサイズを縮小する方法はありますか?

イメージサイズを小さくするには? drawableからの外部ロケーションにもちょうど対処すると、ファイルサイズが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からexternalへの対処) – Selvin

+0

@selvinユーザがあなたの他のアプリのそれらを使うことができるようにあなたがdrawable PNGをすべてユーザのフォルダに入れたい場合があります:) –

答えて

0

厳密にPNGに固執しますか? Bitmap.compressFormat.JPEGはもっと多く圧縮することができます。

PNGファイルサイズを縮小する唯一の方法は、PNGイメージのサイズをさらに小さくすることです。私はそれが純粋なAndroidでまっすぐだとは思わないが、これに使用できる画像ライブラリがある。

新しいBitmapオブジェクトを作成し、getPixels(...)を使用して手動で元の値を読み込み、縮小して新しいものを書き込むことで、自分で書き込むこともできます。しかし、私はそれを推奨しません、アンチエイリアスで正しく動作するには、サイズ変更が難しいかもしれません。

1

1)あなたのpngが事前に定義されている場合は、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

私はこれが古いことを知っていますが、将来の求職者にはまだ答えます。
AndroidのBitmapクラスはPNGの圧縮にかなり制限されています。限られた最適化でPNG-32を作成するだけです。あなたのapkファイルをパッケージ化するaaptプログラムは、PNGファイルを最適化します。したがって、PNGファイルを解凍してビットマップに読み込んだ後、ビットマップクラスで圧縮すると、はるかに大きなファイルが得られます。
pngjライブラリを使用できます。このライブラリは、PNGファイルの圧縮をはるかに向上させます。
あなたの説明に基づいて、アプリケーション内のファイルを編集していないようですが、リソースからカードにコピーするだけでよいので、PNGファイルをrawフォルダに含めてストリームを取得するだけですopenRawResource()に電話してカードに直接コピーしてください。 TinyPNGを使用して元のPNGファイルをさらに最適化してから、アプリに組み込むことができます。

関連する問題