1

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 のイメージを使用してみました。
ここに画像の説明を入力

4

2 に答える 2