2017-07-20 18 views
1

よりもはるかに大きい文字列、 を返し、私が使用してバイト配列に変換しますAndroidのBase64では、私は3.30メガバイトのサイズの画像を持っている私は、サーバーに画像を送信する必要が画像

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byteArray = stream.toByteArray(); 

をその後、BASE64へ

Base64.encodeToString(byteArray , Base64.DEFAULT) 

EDIT:バイト配列(bytearray)の長さをチェックすると、20 MBです。 ただし、PCまたは携帯電話のサイズは3.30 MB

返される文字列の長さは28 MBですが、説明と解決方法はありますか?

+0

の6ビットのみを使用していますfは「私は、3.30メガバイトのサイズの画像を持っている」 - **あなたはそれで意味しています正確に何** ?あなたは 'bmpで消費されるメモリを測定していますか?あなたは 'bmp'を作るために使うファイルのサイズを参照していますか?他に何か意味がありますか? – CommonsWare

+0

画像のプロパティをクリックすると表示されるサイズです。 –

答えて

1

ビットマップを100とPNGで圧縮しています。代わりにJPEGと60または75の品質を使用してください。

+0

ありがとう、問題を解決しました –

+0

あなたは大歓迎です。 –

0
Bitmap bm = BitmapFactory.decodeFile("path to file"); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap 
object 
byte[] b = baos.toByteArray(); 
0

あなたは100が全くずっとcompresionがないことを意味し、得られた画像は、この最初のコードでは大きい品質のビットマップを圧縮:

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byteArray = stream.toByteArray(); 

ByteArrayの20メガバイト

がBase64でエンコードをすることが通常ですここにありますバイト配列より大きい

Base64は、テキストのみを送信し、 を送信し、64文字を使用するバイナリデータを送信/保存するために作成されました。各バイトのバイトまたは同じ256が8 https://en.wikipedia.org/wiki/Base64

Base64.encodeToString(byteArray , Base64.DEFAULT) 
関連する問題