Boaz
Boaz

Reputation: 5084

PIL Image.size returns the opposite width/height

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

Answers (2)

Lukas Graf
Lukas Graf

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

user3666197
user3666197

Reputation: 1

A: This is a standard state.

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

Related Questions