2010-04-05 18 views
4

Notre application utilise l'action de sélection de galerie pour récupérer une image de l'appareil à télécharger sur un nouveau blog. Nous voyons sur le Moto Droid que les images prises en portrait sont renvoyées à l'application en orientation paysage afin que l'image soit latérale. AFAIK cela se produit uniquement sur le Droid.Android Image Orientation problème sur Motorola Droid

à cet via google, mais nous avons besoin de l'image en taille réelle à télécharger dans l'orientation correcte de sorte que la solution ne fonctionne pas pour nous:

http://groups.google.com/group/android-developers/browse_frm/thread/1246475fd4c3fdb6?pli=1

Un moyen facile de reproduire c'est à Prenez une photo en portrait sur le Droid, puis envoyez-la à vous-même via Gmail. Dans le message électronique, l'image sera en mode paysage (sur le côté). J'ai testé sur la mise à jour de droid 2.1 et le problème est toujours là.

Voici quelques informations supplémentaires:

J'ai pris un coup d'oeil à l'info image dans photoshop, et il a cette ligne:

<tiff:Orientation>1</tiff:Orientation> 

Cette spécification (http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html) dit que la valeur de 1 est le suivant:

1 = 0e la ligne représente la partie supérieure visuelle de l'image, et la colonne 0e représente le côté visuel gauche.

Dans ce cas, n'est-ce pas incorrect? Le haut de l'image dans mon cas est le côté droit, avec la 0ème ligne étant le côté gauche, ce qui devrait être une valeur de '5' pour l'orientation tiff.

+0

Voir ma réponse ici: http://stackoverflow.com/questions/29971319/image-orientation-android/32747566#32747566 J'ai testé sur de nombreux appareils. –

Répondre

2

Je pense que cela peut être un bug dans votre code de serveur avec des tags EXIF. Sur mon Droid avec 2.1, j'ai pris une photo en mode portrait, comme vous l'avez mentionné, et j'ai enquêté sur le résultat enregistré (envoyé par e-mail, par exemple). Lorsque vous ouvrez le fichier dans Aperçu (sur un Mac), il semble correct.

Avec l'outil exif pratique (port install exif sur Mac), j'ai pu imprimer les informations EXIF:

$ exif -t Orientation image.jpg 
EXIF entry 'Orientation' (0x112, 'Orientation') exists in IFD '0': 
Tag: 0x112 ('Orientation') 
    Format: 3 ('Short') 
    Components: 1 
    Size: 2 
    Value: right - top 

Maintenant, si vous deviez effacer les informations EXIF, qui est ce qui pourrait se produire dans votre communication serveur/client:

$ exif --ifd=0 --tag=Orientation --set-value= -o image2.jpg image.jpg 
Wrote file 'image2.jpg'. 

$ exif -t Orientation image2.jpg 
EXIF entry 'Orientation' (0x112, 'Orientation') exists in IFD '0': 
Tag: 0x112 ('Orientation') 
    Format: 3 ('Short') 
    Components: 1 
    Size: 2 
    Value: 

L'image résultante sera en mode paysage.

Ainsi, la ligne de fond est que je pense que Droid stocke les bits dans l'image toujours dans le paysage et reposant sur les métadonnées EXIF ​​pour stocker les informations de rotation (ce qui est parfaitement valide), et votre application peut être mise au rebut ces informations .

Espérons que ça aide! N'hésitez pas à commenter ou modifier la question d'origine pour dépanner davantage.

+0

merci, ajouté plus d'infos ci-dessus – roundhill

+0

Je viens aussi de regarder les informations de fichier pour une image prise en paysage, et il a la même valeur d'orientation de «1». Je pense que c'est le problème! – roundhill

+0

Je vois la même chose. J'ai un code côté serveur qui fait pivoter l'image automatiquement en fonction de l'indicateur d'orientation EXIF, et le problème est que Bitmap perd toutes les données EXIF ​​entre le moment de l'enregistrer de l'application Appareil photo et le téléchargement vers le serveur. Une partie de ce processus consiste à utiliser BitmapFactory pour échantillonner l'image, car je n'ai pas besoin de l'image complète. Juste besoin de savoir comment conserver ces données EXIF. Va poster si je trouve quelque chose. – Joe