カメラから取得した画像をpng形式に圧縮してサイズを小さくしたいので、次のコードを使用します。
compressedPictureFile = new File(imagePath);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
FileOutputStream fOut = new FileOutputStream(compressedPictureFile);
boolean compressed = bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut);
fOut.flush();
fOut.close();
問題は、compressedPictureFileが実際には元の画像よりも大きいことです(1 Mbから6Mbへ)。
何が欠けていますか?そして、これは画像のサイズを縮小する最良の方法ですか?
ありがとう
カメラで撮影した画像は、おそらく jpg
-formatに保存されます。これは非可逆ですが、写真などの色の多い画像には比較的適しています。
メソッドを使用してビットマップを圧縮する場合、ビットマップを png
として保存します。 png圧縮はロスレスですが、色が少ない場合(特定のロゴタイプや他のグラフィックなど)はかなり小さなファイルサイズになります。 pngファイルの色の量と複雑さが増すと、ファイルサイズも増加します(これがカメラがjpgを保存する理由です-ほとんどの写真では、品質/ファイルサイズの比率はpngよりもはるかに優れています)。
したがって、写真のファイルサイズを小さくしたい場合は、jpg圧縮を使用して、品質パラメータを試してください。多くのスペースを節約できるため、画像の解像度を下げることもできます(50%の解像度のファイルは、データサイズが約25%になります)。
それは私のアプリでうまくいきます
public static String makeScreen(View view) throws Exception {
String filename = "file.png";
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b = view.getDrawingCache();
FileOutputStream file = null;
try {
file = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "folder/" + filename);
if (file != null) {
b.compress(Bitmap.CompressFormat.PNG, 98, file);
file.close();
}
view.destroyDrawingCache();
} catch (Exception e) { view.destroyDrawingCache(); }
}