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 ...
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
Salut @greenapps S'il vous plaît se référer à ma mise à jour ci-dessus – yeeen
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. –