2016-11-16 2 views
0

Я пытаюсь посмотреть другие примеры сжатия изображений. Тем не менее, я до сих пор не знаю, где и как включить коды для сжатия. Может ли кто-нибудь помочь мне в этом?Как сжать изображение при загрузке на сервер?

public void uploadMultipart() { 
      //getting name for the image 
      String name = editText.getText().toString().trim(); 

     //getting the actual path of the image 
     String path = getPath(filePath); 


     //Uploading code 
     try { 
      String uploadId = UUID.randomUUID().toString(); 

      //Creating a multi part request 
      new MultipartUploadRequest(this, uploadId, Constants.UPLOAD_URL) 
        .addFileToUpload(path, "image") //Adding file 
        .addParameter("name", name) //Adding text parameter to the request 
        .setNotificationConfig(new UploadNotificationConfig()) 
        .setMaxRetries(2) 
        .startUpload(); //Starting the upload 

     } catch (Exception exc) { 
      Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    } 

//method to get the file path from uri 
    public String getPath(Uri uri) { 
     Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     String document_id = cursor.getString(0); 
     document_id = document_id.substring(document_id.lastIndexOf(":") + 1); 
     cursor.close(); 

     cursor = getContentResolver().query(
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null); 
     cursor.moveToFirst(); 

     String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
//  Bitmap bmp = BitmapFactory.decodeFile(path); 
//  ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
//  bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     cursor.close(); 


     return path; 
    } 
+0

Какой тип файла это? Если его jpg или png, то он уже сжат. Единственным файлом, который не будет, является .bmp, что не слишком вероятно. –

+0

@GabeSechan Это jpg или png, но я видел много примеров, хотя, когда я искал, как сжимать изображения. – arsenallavigne

+0

Обе из них уже сжаты. Если вы повторно сжимаете jpg, он потеряет качество, потому что jpeg - это сжатие с потерями. Если вы перекомпилируете png, он даст вам тот же самый файл (если вы не сжимаете его до jpg, и в этом случае вы потеряете качество). Если вы в порядке с потерей качества, вы можете немного сжать pngs, но jpegs уже сделаны. И вообще вы не хотите терять качество. –

ответ

0

Вот код для компресса изображения в Bitmap

Ниже код для JPEG-изображений

Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("imagename.png")); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // you can set as 90 for compress ration 
    Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 

Ниже код для PNG изображений:

Bitmap bitmap= BitmapFactory.decodeStream(getAssets().open("imagename.png")); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
    Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 

В противном случае, Вот код которые кодируют строку и отправляют на сервер в виде кодированного формата.

String encodedString =""; 
    try { 

      BitmapFactory.Options options = null; 
      options = new BitmapFactory.Options(); 
      options.inSampleSize = 1; 
      bitmap = BitmapFactory.decodeFile(filepath, options); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      // Must compress the Image to reduce image size to make upload easy 
      bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 

      byte[] byte_arr = stream.toByteArray(); 
      // Encode Image to String 
      encodedString = Base64.encodeToString(byte_arr, 0); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Попробуйте вышеуказанное решение. Это будет работать для меня.

+0

Спасибо! Я видел это раньше, но я не уверен, где разместить этот кусок кода? – arsenallavigne

+0

После извлечения пути изображения из камбуза или внутренней памяти. Этот путь будет в строчном формате. это сжатие изображения с использованием вышеуказанного кода и отправка сжатого изображения. –

+0

Я пробовал использовать вышеупомянутый метод, но до сих пор не смог его решить. Я думаю, что я мог бы ошибиться. – arsenallavigne