2013-07-05 2 views
0

В моем текущем приложении я отправляю фотографии на свой сервер. Теперь у меня есть проблема, что эти фотографии иногда слишком большие. Каков наилучший подход к уменьшению размера изображения перед отправкой его на сервер. В настоящее время я сохранил URI изображения в базе данных (/mnt/sdcard/DCIM/SF.png) и отправил его на сервер. Я хочу уменьшить разрешение изображения, чтобы он нуждался в меньшем объеме дискового пространства. Есть ли способ конвертировать изображения в Android?Как преобразовать изображение перед отправкой на сервер?

Может ли кто-нибудь помочь мне в правильном решении этого вопроса?

Благодаря

ответ

0

я использовал следующий код для отправки изображения на сервер, здесь я преобразовать изображение в массив байтов. Сначала вам нужно декодировать изображение из URI, а затем преобразовать битмап в массив байтов.

Для декодирования растрового изображения из URI:

Bitmap imageToSend= decodeBitmap("Your URI"); 

Метод для декодирования URI

Bitmap getPreview(URI uri) { 
    File image = new File(uri); 
    BitmapFactory.Options bounds = new BitmapFactory.Options(); 
    bounds.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(image.getPath(), bounds); 
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1)) 
     return null; 
    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight 
      : bounds.outWidth; 
    BitmapFactory.Options opts = new BitmapFactory.Options(); 
    opts.inSampleSize = originalSize/THUMBNAIL_SIZE; 
    return BitmapFactory.decodeFile(image.getPath(), opts);  
} 

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

try { 


      ByteArrayOutputStream bosRight = new ByteArrayOutputStream(); 
      imageToSend.compress(CompressFormat.JPEG, 100, bosRight); 
      byte[] dataRight = bosRight.toByteArray(); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new HttpPost("url to send"); 
      ByteArrayBody babRight = new ByteArrayBody(dataRight, 
        "ImageName.jpg"); 
      MultipartEntity reqEntity = new MultipartEntity(
        HttpMultipartMode.BROWSER_COMPATIBLE); 
      reqEntity.addPart("params", babRight); 
      postRequest.setEntity(reqEntity); 
      HttpResponse response = httpClient.execute(postRequest); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        response.getEntity().getContent(), "UTF-8")); 
      String sResponse; 
      StringBuilder s = new StringBuilder(); 

      while ((sResponse = reader.readLine()) != null) { 
       s = s.append(sResponse); 
       Log.v("Response value is", sResponse); 
       JSONObject postObj = new JSONObject(sResponse); 
       String successTag = postObj.getString("success"); 
       if (successTag.equals("1")) { 
        imageDeletion(); 
       } else { 

       } 
      } 
     } catch (Exception e) { 
      Log.e(e.getClass().getName(), e.getMessage()); 
     } 
+0

спасибо, не могли бы вы как метод сжатия вашего объекта ImageToSend –

+0

imageToSend будет объектом вашего растрового изображения, которое вы хотите отправить на сервер. –

+0

@AlPhaba: я обновил свой ответ, обратите внимание на это – Aerrow

0

для отправки изображения на сервер вы можете закодировать его в Base64, а затем отправить закодированную строку Base64 на сервер ... класс base64 в android не поддерживает кодировку, поэтому вам придется загрузить файл класса Java Bae64 ... Вы получаете его здесь http://iharder.sourceforge.net/current/java/base64/ после того, что его очень simple.For пример

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 

R.drawable.YOURIMAGE); 
ByteArrayOutputStream bao = new ByteArrayOutputStream(); 

bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao); 

byte [] ba = bao.toByteArray(); 

String encodedstring=Base64.encodeBytes(ba); 

Затем отправить закодированную строку как нормальное значение имени пары

и хороший пример приведен в этой ссылке http://blog.sptechnolab.com/2011/03/09/android/android-upload-image-to-server/

+0

Сообщите мне, если это поможет ... – shreyas

Смежные вопросы