2017-02-22 60 views
1

我實現了捕獲圖像並將其發送到服務器的功能。發送到服務器時圖像旋轉到90度

如果我採取與縱向模式的圖片,然後將其發送到服務器,畫面旋轉總是向左
90度但是,如果我重複這與水平模式,一切工作正常。

所以,我想出了一個想法 我把圖片變成了一個位圖對象,並獲得寬度和高度。 我累了要做的就是在發送到服務器之前將圖片旋轉到90度(當我嘗試使用肖像模式時) 但是,它從來沒有工作過(縱向模式的圖片在寬度上也有更多像素...... )

任何人都可以給我一些提示嗎?

private void call_camera(){ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, PICK_FROM_CAMERA); 
} 

這是用於調用相機功能。

public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(resultCode != RESULT_OK) 
     return; 

    if(requestCode == PICK_FROM_CAMERA){ 

     imageUri = data.getData(); 
     Log.d("메시지", "uri = "+imageUri); 


     Cursor c = this.getContentResolver().query(imageUri, null, null, null, null); 
     c.moveToNext(); 
     absolutePath = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA)); 
    } 
} 

我用absolutePath 製作的文檔對象,然後將其發送給服務器。

fileInputStream = new FileInputStream(file); 
     int bytesAvailable = fileInputStream.available(); 
     int maxBufferSize = 1024; 
     int bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     byte[] buffer = new byte[bufferSize]; 

     int bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     while (bytesRead > 0) { 

     DataOutputStream dataWrite = new  DataOutputStream(con.getOutputStream()); 
      dataWrite.write(buffer, 0, bufferSize); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     } 
     fileInputStream.close(); 

     wr.writeBytes("\r\n--" + boundary + "--\r\n"); 
     wr.flush(); 

回答

1

試試下面的方法

private Bitmap fixOrientation(Bitmap bitmap) { 
    ExifInterface ei = null; 
    Bitmap selectedBitmap; 
    try { 
     ei = new ExifInterface(mCurrentPhotoPath); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 

    switch (orientation) { 
     case ExifInterface.ORIENTATION_ROTATE_90: 
      selectedBitmap = rotateImage(bitmap, 90); 
      break; 
     case ExifInterface.ORIENTATION_ROTATE_180: 
      selectedBitmap = rotateImage(bitmap, 180); 
      break; 
     case ExifInterface.ORIENTATION_ROTATE_270: 
      selectedBitmap = rotateImage(bitmap, 270); 
      break; 
     case ExifInterface.ORIENTATION_NORMAL: 
      selectedBitmap = bitmap; 
      break; 
     default: 
      selectedBitmap = bitmap; 
    } 
return selectedBitmap; 
} 
+0

謝謝!有用! – heesu

+0

我did.but ..因爲我得名低,它說我的投票不改變分數 – heesu

+0

謝謝。快樂編碼:) –