2015-11-02 2 views
0

Dans mon code, j'autorise l'utilisateur à télécharger des photos depuis la galerie ou depuis la caméra. Ensuite, l'image est stockée dans le serveur grâce à la modernisation. Lorsqu'elle est récupérée, la photo est toujours tournée de 90 degrés si la photo est prise en utilisant l'appareil photo du téléphone (peu importe si elle est invoquée via l'application ou invoquée directement par l'appareil photo). Si les images ne sont pas prises avec l'appareil photo, l'orientation est correcte. comment résoudre ça?L'image Android capturée stockée dans le serveur est pivotée lorsqu'elle est récupérée

Je sais si j'ai essayé d'afficher l'image directement sans la stocker dans le serveur, et il était possible d'être dans la bonne orientation car je pouvais la faire pivoter avant de l'afficher. Faire sth semblable aux codes ici: https://gist.github.com/Mariovc/f06e70ebe8ca52fbbbe2.

Mais parce que j'ai besoin de télécharger sur le serveur, puis récupérer à partir du serveur. Comment puis-je le faire pivoter avant de le stocker sur le serveur de sorte que lorsque je le récupère, il est dans la bonne direction?

est Ci-dessous quelques parties de mes codes (juste un peu de manipulation habituelle d'images et displayAvatarInProfile() est appelé après le service terminé le téléchargement de l'image):

public void displayAvatarInProfile(String filePath) { 
    if(filePath != null && filePath != ""){ 
     int targetW = mProfilePicImageView.getWidth(); 
     int targetH = mProfilePicImageView.getHeight(); 
     Bitmap bm = ImageStorageUtils.resizePic(filePath, targetW, targetH); 
     mProfilePicImageView.setImageBitmap(bm); 
    } else { 
     mProfilePicImageView.setImageBitmap(null); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode == Activity.RESULT_OK) { 
     Uri fileUri = null; 
     String filePath = null; 
     switch(requestCode) { 
      case REQUEST_PICK_IMAGE: 
       fileUri = data.getData(); 
       break; 
      case REQUEST_CAPTURE_IMAGE: 
       File imageFile = ImageStorageUtils.getFile(
         getActivity().getResources().getString(R.string.ApptTitle), 
         "avatar_" + mUser.getLogin()); 
       filePath = imageFile.getAbsolutePath(); 
       fileUri = ImageStorageUtils.getUriFromFilePath(mContext.get(), filePath); 
       break; 
      default: 
       break; 
     } 
     if(fileUri != null) { 
      getActivity().startService(ProfileService.makeIntentUploadAvatar(
        mContext.get(), mUser.getId(), fileUri)); 
     } 
    } 
    } 


public void pickImage() { 
    final Intent imageGalleryIntent = 
     new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI) 
      .setType("image/*") 
      .putExtra(Intent.EXTRA_LOCAL_ONLY, true); 

    // Verify the intent will resolve to an Activity. 
    if (imageGalleryIntent.resolveActivity(getActivity().getPackageManager()) != null) 
     // Start an Activity to get the Image from the Image Gallery 
     startActivityForResult(imageGalleryIntent, 
      DisplayProfileFragment.REQUEST_PICK_IMAGE); 

} 

public void captureImage() { 
    Uri captureImageUri = null; 
    try { 
     captureImageUri = Uri.fromFile(ImageStorageUtils.createImageFile(
       mContext.get(), 
       getActivity().getResources().getString(R.string.ApptTitle), 
       "avatar_" + mUser.getLogin())); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // Create an intent that will start an Activity to get 
    // capture an image. 
    final Intent captureImageIntent = 
      new Intent(MediaStore.ACTION_IMAGE_CAPTURE) 
      .putExtra(MediaStore.EXTRA_OUTPUT, captureImageUri); 

    // Verify the intent will resolve to an Activity. 
    if (captureImageIntent.resolveActivity(getActivity().getPackageManager()) != null) 
     // Start an Activity to capture an image 
     startActivityForResult(captureImageIntent, 
      DisplayProfileFragment.REQUEST_CAPTURE_IMAGE); 
} 

a été commenté par @greenapps que je besoin de plus Description:

Quand je télécharger un fichier, je fais ceci:

boolean succeeded = mImpatientServiceProxy.uploadAvatar(userId, new TypedFile("image/jpg", imageFile)); 

Lorsque je télécharge, je reçois un objet retrofit.client.Response, que je puis ge t InputStream à partir de la réponse et écrire les données dans un fichier à l'aide d'un flux de sortie.

final InputStream inputStream = response.getBody().in(); 
final OutputStream outputStream = new FileOutputStream(file); 
IOUtils.copy(inputStream, outputStream); 

MISE A JOUR 11/05/2015: Pourquoi est-il pas un double d'exister Soln cos l'utilisateur peut télécharger à partir de la galerie, u ne sais pas si elle est une photo prise à partir de ressources en ligne ou de la caméra, donc Vous ne pouvez pas faire pivoter l'image lorsque vous l'affichez ...

+0

Nous ne pouvons pas voir ce que vous téléchargez. Un fichier? Un bitmap? Nous ne pouvons pas non plus voir ce que vous téléchargez et comment. – greenapps

+0

Salut @greenapps S'il vous plaît se référer à ma mise à jour ci-dessus – yeeen

+1

duplication possible de * [pourquoi l'image capturée en utilisant l'intention de la caméra est tournée sur certains appareils dans android] (http://stackoverflow.com/questions/14066038/why-image-captured-using -camera-intention-obtient-tourné-sur-certains-appareils-dans-android) *. Vous devriez ouvrir le fichier Jpeg que vous recevez dans 'onActivityResult()', le tourner comme vous le souhaitez et le compresser à nouveau en Jpeg. –

Répondre

0

Utilisez la caméra au lieu de l'intention. lorsque vous capturez l'image en utilisant des intentions, il affiche tourné. Dans l'appareil photo, il existe des méthodes qui permettent de changer la rotation de la caméra ainsi que la photo capturée.

+0

Que voulez-vous dire par caméra api au lieu de l'intention? Pouvez-vous poster des codes ou des liens? Cos j'ai cherché en ligne, caméra api codes connexes également utilisé intention – yeeen

+0

www.tutorialspoint.com/android/android_camera.htm vérifier celui-ci. Vous comprendrez tout ce que j'essayais de dire ... –

+0

Oh merci ... je l'ai vu, c'est juste en dessous de – yeeen