Every time my father sends portrait photos taken on his iPhone to someone in the family that doesn't have an iPhone (eg. Android and Windows Phone 7 devices), they come through landscape. When we try to turn the phone to see the photos correctly, our devices rotate the photos, making it impossible to actually view them the correct way up. ARGH!

Anyway, it seems to be that the iPhone stores all photos landscape, and if they were taken portrait, this is stored in the EXIF data, which the iPhone handles correctly... However, it seems very few other devices handle this (including most web browsers).

What I don't understand is why EXIF stores orientation. Why doesn't the iPhone just rotate the picture so it's always upright? What advantage could the current method have? (and is this really a good enough reason to break compatibility with so many photo viewers so badly?!).

I dunno why. But I know what I do: I run all images through jhead-autorot, which losslessly transforms images that need it based on the Exif tag. (Losslessly when the image size is a multiple of 16, which it usually is for images straight uot of a camera.)
–
mattdmJun 4 '11 at 21:35

It may be the metadata is being stripped en-route (my mobile carrier does this) - how are you getting the photos between devices? You could verify by taking the photo sent to the Android/WP7 device, and either send it back, or transfer to a PC.Mac and view there...
–
Rowland Shaw♦Jun 5 '11 at 8:24

The image is being emailed (via GMail, over SSL, so the carrier can't see/alter it). The EXIF data is still there (and GMail thumbnails show it correctly)
–
Danny TuppenyJun 5 '11 at 9:45

2 Answers
2

My guess is it is computationally simpler and/or cheaper to always encode photos the same way, and to treat the orientation sensor separately via EXIF metadata. This may especially be true if the jpeg encoder is highly optimized or in hardware.

But anyway, this sounds to me like a deficiency in the photo viewers. EXIF has been standardized for a long time now, I see no reason the viewers can't do the rotation themselves.

That's what I thought, but with Android not doing it, WP7 not doing it, and no browsers that I tried doing it, it seems a bit weird! :(
–
Danny TuppenyJun 4 '11 at 22:12

Danny: one thought: if you rotate the photo in software, is the exif data still the same? If yes, viewer programs may not feel safe assuming the photo hasn't been rotated in post, so they ignore the rotation exif information. I guess this could be considered a deficiency in Apple's approach. Usually what I do is load up photos in processing software like lightroom and share the processed versions, which are rotated correctly. I understand this is annoying and should be unnecessary with a phone.
–
rm999Jun 5 '11 at 19:01

The data is not the same (otherwise, the picture would be rotated again if I reloaded it). It kinda feels like Apple have jumped the gun and started using this even though general support outside of the iPhone is absolutely poor :-(
–
Danny TuppenyJun 5 '11 at 19:06

This is a double edged knife, on one side it is easier for the camera to write the picture always in the same format, less firmware needs to be developed and less power is drained from your machine due to the precessing to rotate the picture itself upon being taken. But on the other hand while you're sparing battery/processing power here, wherever you're are visualizing the image 2 things might happen, the software rotate the picture or it doesn't as you said in android, this means that the processing that didn't happen on the camera will have to occur on the software every time you open the picture, or you won't see it as you want.

I had a Sony DSC-W80 and it would change the images to the correct orientation over writing it on the EXIF data, my GF1 only does neither of that and if I edit the image with the firmware to do the rotation, it just writes exif data and it rotates on the camera itself every time I'm looking at it, so why not do it in the first place when I took the picture for it never to be needed again?

In the end, it looks like that there is no standard behaviour on this implementation and in my opinion the camera should record the picture on the correct orientation upon the picture being taken, because like that no future processing will be needed every time we open the picture.