2016-10-27 6 views
0

私はVolleyを使用してサーバーに画像を送信しています。以下はビットマップを圧縮してバイトに変換する私のコードです。実際のサイズで画像を送ろうとしていますが、bmp=Bitmap.createScaledBitmap(bmp,500,400, true)と指定すると画像が伸びます。サーバーに画像を投稿していますが、サイズは非常に小さい

public String getStringImage(Bitmap bmp) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] imageBytes = baos.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

これは私がサーバー上で取得していますサイズ、その本当に小さいです:以下

image

サーバーに送信されるコードです:

@Override 
protected Map<String, String> getParams() throws AuthFailureError { 
    Map<String,String> params = new Hashtable<String, String>(); 
    for(int i=0; i<bitmapArray.size(); i++){ 
     Log.d("size of array is",String.valueOf(bitmapArray.size())); 
     params.put("image"+(i+1),getStringImage(bitmapArray.get(i))); 
     params.put("name"+(i+1), "name"+(i+1)); 
    } 
    return params; 
} 
+0

あなたはgetStringImage' 'に渡しているビットマップが既に圧縮または – Leo

+0

を小型化されていない、私はあなたが' onActivityResultからのビットマップを使用していると考えていることを確認してください - ここで

は、私は私の仕事のためにしたその一例ですこれは正しい選択ではない。 – Enzokie

答えて

0

あなたの場合以下のようにファイルurlまたはuriを渡さずにCamera app Intentを返すビットマップを使用すると、サムネイル画像ビットマップのみが返されます。サイズのため、サイズを変更した場合は、それがぼやけて見えます。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

完全な品質の画像を取得するには、カメラアプリが画像を保存するように、後であなたはファイルパスから画像をお読みくださいonActivityResult時に、カメラのテント余分にファイルパスを提供する必要があり、それをビットマップに変換すると、それは完全な品質の画像になります。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

あなたがカメラアプリケーションに提供するファイルパスまたはuriに、必要な権限があることを確認してください。

あなたのアプリで外部ストレージ許可を使用している場合、これは簡単です。そうでない場合は、カメラアプリに許可を与える方法があります。 https://github.com/santbob/AppPrivateImageUpload

関連する問題