PIL Image.size returns the opposite width/height

2019-07-28 02:50发布

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

2条回答
甜甜的少女心
2楼-- · 2019-07-28 03:07

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.

查看更多
对你真心纯属浪费
3楼-- · 2019-07-28 03:15

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)

查看更多
登录 后发表回答