2016-04-10 14 views
1

画像の品質は非常に悪く、サイズは約25-35 kbsです。 品質を上げるにはどうすればいいですか?android volley(文字列形式)を使用してサーバーに画像をアップロードしようとしています

文字列として画像を送信しているためですか? イメージに変換された文字列は高品質ですか?

私はフルサイズの画像を送信したいですが、どうすればいいですか?

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

    private void uploadImage(){ 
     //Showing the progress dialog 
     final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false); 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String s) { 
         //Disimissing the progress dialog 
         loading.dismiss(); 
         //Showing toast message of the response 
         Toast.makeText(MainActivity.this, "uploaded" , Toast.LENGTH_LONG).show(); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 
         //Dismissing the progress dialog 
         loading.dismiss(); 

         //Showing toast 
         Toast.makeText(MainActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 
        } 
       }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       //Converting Bitmap to String 
       String image = getStringImage(bitmap); 

       //Getting Image Name 
       String name = editTextName.getText().toString().trim(); 

       //Creating parameters 
       Map<String,String> params = new Hashtable<String, String>(); 

       //Adding parameters 
       params.put(KEY_IMAGE, image); 
       params.put(KEY_NAME, "name"); 

       //returning parameters 
       return params; 
      } 
     }; 

     //Creating a Request Queue 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 

     //Adding request to the queue 
     requestQueue.add(stringRequest); 
    } 
+0

「画像の質は非常に悪く、サイズは約25-35kbsです。それではなぜそのようなイメージを送るのですか?画像が悪い品質であれば、それは悪くなります。 – greenapps

+0

私のネクサスから画像をクリックして送信します。5 -_- – Bawa

+0

あなたは本当に魔術師です! – greenapps

答えて

1

データからイメージを取得しないでください。常に低品質のイメージです。ファイルパスを使用して、ファイルパスからイメージを取得してみてください。

オープンカメラ

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(path)); 
startActivityForResult(intent, CAMERA_PIC_REQUEST);  

そして、あなたは画像をonActivityResultに戻ったときに、あなたの定義されたパスに保存されます。そこから高解像度の画像を得ることができます。または、最後に取得した画像を取得する機能を使用することもできます。

private String getLastImagePath() { 
    final String[] imageColumns = { MediaStore.Images.Media._ID, 
      MediaStore.Images.Media.DATA }; 
    final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
    Cursor imageCursor = managedQuery(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, 
      null, null, imageOrderBy); 
    if (imageCursor.moveToFirst()) { 
     int id = imageCursor.getInt(imageCursor 
       .getColumnIndex(MediaStore.Images.Media._ID)); 
     String fullPath = imageCursor.getString(imageCursor 
       .getColumnIndex(MediaStore.Images.Media.DATA)); 
     return fullPath; 
    } else { 
     return ""; 
    } 
}  

乾杯!

+0

私はそれを試してみましょう:) – Bawa

+0

あなたにとって有益ですか?それが正解として受け入れるよりも、他の誰かがそれから恩恵を受けるように! @Bawa –

+0

私はプロジェクトでそれを整理することに問題があります。私が終わったらすぐに...正しいとマークします。私はあなたが働くと言ったことを確信しています。 – Bawa

関連する問題