Base64 表現を介して画像を交換するサーバーと通信する必要があるアプリケーションがあります。サーバー容量の関係で、サイズが 100KB 未満の画像のみを圧縮して送信できます。以下を使用して、画像のサイズを簡単に取得できます。
File file= new File(path);
long size = file.length() / 1024; // KB
正確なサイズが表示されます。次に、ビットマップにデコードし、次を使用して圧縮します。
int quality= 100;
Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
byte[] byteArr = baos.toByteArray();
そして、ここで物事が汚れます。サイズが 100KB を超える場合は、品質を調整して再圧縮する必要があるため、以前のように正確なサイズ値を適切に取得できません。
編集:メソッドを試したことを忘れていましbyte.lengthたが、結果のサイズは以前と同じではありません。
この例では、AndroidStudio コンソールに示されているように、80KB のイメージを使用してみました。
