Reputation: 5084
Using PIL to determine width and height of images
On a specific image (luckily only this one - but it is troubling) the width/height returning from image.size is the opposite.
The image:
http://storage.googleapis.com/cookila-533ebf752b9d1f7c1e8b4db3/IMG_0004.JPG
The code:
from PIL import Image
import urllib, cStringIO
file = cStringIO.StringIO(urllib.urlopen('http://storage.googleapis.com/cookila-533ebf752b9d1f7c1e8b4db3/IMG_0004.JPG').read())
im=Image.open(file)
print im.size
The result is - (2592, 1936)
should be the other way around
Upvotes: 7
Views: 8079
Reputation: 32560
The reason for this is that this image has Exif Orientation
metadata associated with it that will cause applications that respect that property to rotate it:
# identify -verbose IMG_0004.JPG | grep Orientation
Orientation: RightTop
exif:Orientation: 6
Compare with a regular image:
# identify -verbose iceland_pano.jpg | grep Orientation
Orientation: TopLeft
exif:Orientation: 1
So the image dimensions are actually landscape (more wide than high), but it will get rotated on display by browsers, image viewers etc.
Upvotes: 10
Reputation: 1
Numpy arrays carry images ( from OpenCV2
) with another convention once inspected by data.shape
, so does the PIL/Pillow Image.size
May review and validate as in >>> Python Pillow v2.6.0 paletted PNG (256) How to add an Alpha channel?
print data.shape
gives (1624, 3856)
and print im.size
gives (3856, 1624)
Upvotes: 2