2017-02-22 4 views
1

Ich habe eine Funktion implementiert, die ein Bild erfasst und an den Server sendet.Bild um 90 Grad gedreht beim Senden an Server

Wenn ich ein Bild mit Portrait-Modus nehmen und es dann zum Server senden, wird das Bild dreht sich immer um 90 Grad nach links
Aber, wenn ich dies mit horizontalen Modus wiederholen, funktioniert alles einwandfrei.

Also kam ich auf eine Idee Ich drehte das Bild in ein Bitmap-Objekt und bekam Breite und Höhe. Was ich müde zu tun war, um Bild zu 90 Grad vor dem Senden an den Server zu drehen (wenn ich versuchte, mit Porträt-Modus) Allerdings hat es nie funktioniert (das Bild mit Hochformat hat auch mehr Pixel auf Breite ......)

Kann mir jemand einen Tipp für mich geben ??

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

Dies ist für den Aufruf der Kamerafunktion.

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)); 
    } 
} 

ich ein File-Objekt gemacht durch AbsolutePath mit und schickte sie dann an den Server.

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(); 

Antwort

1

Versuchen Sie folgendes:

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

Dank !!! Es klappt! – heesu

+0

ich did.but .. da ich niedrige Reputation habe, sagt es meine Stimme ändert sich nicht Score – heesu

+0

Danke. Viel Spaß beim Programmieren :) –

Verwandte Themen